diff --git a/docs/modules/collections.md b/docs/modules/collections.md index ea75dd3c..8273804a 100644 --- a/docs/modules/collections.md +++ b/docs/modules/collections.md @@ -14,5 +14,4 @@ A double-ended queue. ### `collections.defaultdict` -A `dict` wrapper that calls a factory function to supply missing values. -It is not a subclass of `dict`. \ No newline at end of file +A dictionary that returns a default value when a key is not found. \ No newline at end of file diff --git a/docs/retype.yml b/docs/retype.yml index 215dff05..334974c0 100644 --- a/docs/retype.yml +++ b/docs/retype.yml @@ -3,7 +3,7 @@ output: .retype url: https://pocketpy.dev branding: title: pocketpy - label: v1.4.3 + label: v1.4.4 logo: "./static/logo.png" favicon: "./static/logo.png" meta: diff --git a/include/pocketpy/_generated.h b/include/pocketpy/_generated.h index f0968997..9b418776 100644 --- a/include/pocketpy/_generated.h +++ b/include/pocketpy/_generated.h @@ -7,7 +7,7 @@ namespace pkpy{ inline const char kPythonLibs_bisect[] = {34,34,34,66,105,115,101,99,116,105,111,110,32,97,108,103,111,114,105,116,104,109,115,46,34,34,34,10,10,100,101,102,32,105,110,115,111,114,116,95,114,105,103,104,116,40,97,44,32,120,44,32,108,111,61,48,44,32,104,105,61,78,111,110,101,41,58,10,32,32,32,32,34,34,34,73,110,115,101,114,116,32,105,116,101,109,32,120,32,105,110,32,108,105,115,116,32,97,44,32,97,110,100,32,107,101,101,112,32,105,116,32,115,111,114,116,101,100,32,97,115,115,117,109,105,110,103,32,97,32,105,115,32,115,111,114,116,101,100,46,10,10,32,32,32,32,73,102,32,120,32,105,115,32,97,108,114,101,97,100,121,32,105,110,32,97,44,32,105,110,115,101,114,116,32,105,116,32,116,111,32,116,104,101,32,114,105,103,104,116,32,111,102,32,116,104,101,32,114,105,103,104,116,109,111,115,116,32,120,46,10,10,32,32,32,32,79,112,116,105,111,110,97,108,32,97,114,103,115,32,108,111,32,40,100,101,102,97,117,108,116,32,48,41,32,97,110,100,32,104,105,32,40,100,101,102,97,117,108,116,32,108,101,110,40,97,41,41,32,98,111,117,110,100,32,116,104,101,10,32,32,32,32,115,108,105,99,101,32,111,102,32,97,32,116,111,32,98,101,32,115,101,97,114,99,104,101,100,46,10,32,32,32,32,34,34,34,10,10,32,32,32,32,108,111,32,61,32,98,105,115,101,99,116,95,114,105,103,104,116,40,97,44,32,120,44,32,108,111,44,32,104,105,41,10,32,32,32,32,97,46,105,110,115,101,114,116,40,108,111,44,32,120,41,10,10,100,101,102,32,98,105,115,101,99,116,95,114,105,103,104,116,40,97,44,32,120,44,32,108,111,61,48,44,32,104,105,61,78,111,110,101,41,58,10,32,32,32,32,34,34,34,82,101,116,117,114,110,32,116,104,101,32,105,110,100,101,120,32,119,104,101,114,101,32,116,111,32,105,110,115,101,114,116,32,105,116,101,109,32,120,32,105,110,32,108,105,115,116,32,97,44,32,97,115,115,117,109,105,110,103,32,97,32,105,115,32,115,111,114,116,101,100,46,10,10,32,32,32,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,32,105,115,32,115,117,99,104,32,116,104,97,116,32,97,108,108,32,101,32,105,110,32,97,91,58,105,93,32,104,97,118,101,32,101,32,60,61,32,120,44,32,97,110,100,32,97,108,108,32,101,32,105,110,10,32,32,32,32,97,91,105,58,93,32,104,97,118,101,32,101,32,62,32,120,46,32,32,83,111,32,105,102,32,120,32,97,108,114,101,97,100,121,32,97,112,112,101,97,114,115,32,105,110,32,116,104,101,32,108,105,115,116,44,32,97,46,105,110,115,101,114,116,40,120,41,32,119,105,108,108,10,32,32,32,32,105,110,115,101,114,116,32,106,117,115,116,32,97,102,116,101,114,32,116,104,101,32,114,105,103,104,116,109,111,115,116,32,120,32,97,108,114,101,97,100,121,32,116,104,101,114,101,46,10,10,32,32,32,32,79,112,116,105,111,110,97,108,32,97,114,103,115,32,108,111,32,40,100,101,102,97,117,108,116,32,48,41,32,97,110,100,32,104,105,32,40,100,101,102,97,117,108,116,32,108,101,110,40,97,41,41,32,98,111,117,110,100,32,116,104,101,10,32,32,32,32,115,108,105,99,101,32,111,102,32,97,32,116,111,32,98,101,32,115,101,97,114,99,104,101,100,46,10,32,32,32,32,34,34,34,10,10,32,32,32,32,105,102,32,108,111,32,60,32,48,58,10,32,32,32,32,32,32,32,32,114,97,105,115,101,32,86,97,108,117,101,69,114,114,111,114,40,39,108,111,32,109,117,115,116,32,98,101,32,110,111,110,45,110,101,103,97,116,105,118,101,39,41,10,32,32,32,32,105,102,32,104,105,32,105,115,32,78,111,110,101,58,10,32,32,32,32,32,32,32,32,104,105,32,61,32,108,101,110,40,97,41,10,32,32,32,32,119,104,105,108,101,32,108,111,32,60,32,104,105,58,10,32,32,32,32,32,32,32,32,109,105,100,32,61,32,40,108,111,43,104,105,41,47,47,50,10,32,32,32,32,32,32,32,32,105,102,32,120,32,60,32,97,91,109,105,100,93,58,32,104,105,32,61,32,109,105,100,10,32,32,32,32,32,32,32,32,101,108,115,101,58,32,108,111,32,61,32,109,105,100,43,49,10,32,32,32,32,114,101,116,117,114,110,32,108,111,10,10,100,101,102,32,105,110,115,111,114,116,95,108,101,102,116,40,97,44,32,120,44,32,108,111,61,48,44,32,104,105,61,78,111,110,101,41,58,10,32,32,32,32,34,34,34,73,110,115,101,114,116,32,105,116,101,109,32,120,32,105,110,32,108,105,115,116,32,97,44,32,97,110,100,32,107,101,101,112,32,105,116,32,115,111,114,116,101,100,32,97,115,115,117,109,105,110,103,32,97,32,105,115,32,115,111,114,116,101,100,46,10,10,32,32,32,32,73,102,32,120,32,105,115,32,97,108,114,101,97,100,121,32,105,110,32,97,44,32,105,110,115,101,114,116,32,105,116,32,116,111,32,116,104,101,32,108,101,102,116,32,111,102,32,116,104,101,32,108,101,102,116,109,111,115,116,32,120,46,10,10,32,32,32,32,79,112,116,105,111,110,97,108,32,97,114,103,115,32,108,111,32,40,100,101,102,97,117,108,116,32,48,41,32,97,110,100,32,104,105,32,40,100,101,102,97,117,108,116,32,108,101,110,40,97,41,41,32,98,111,117,110,100,32,116,104,101,10,32,32,32,32,115,108,105,99,101,32,111,102,32,97,32,116,111,32,98,101,32,115,101,97,114,99,104,101,100,46,10,32,32,32,32,34,34,34,10,10,32,32,32,32,108,111,32,61,32,98,105,115,101,99,116,95,108,101,102,116,40,97,44,32,120,44,32,108,111,44,32,104,105,41,10,32,32,32,32,97,46,105,110,115,101,114,116,40,108,111,44,32,120,41,10,10,10,100,101,102,32,98,105,115,101,99,116,95,108,101,102,116,40,97,44,32,120,44,32,108,111,61,48,44,32,104,105,61,78,111,110,101,41,58,10,32,32,32,32,34,34,34,82,101,116,117,114,110,32,116,104,101,32,105,110,100,101,120,32,119,104,101,114,101,32,116,111,32,105,110,115,101,114,116,32,105,116,101,109,32,120,32,105,110,32,108,105,115,116,32,97,44,32,97,115,115,117,109,105,110,103,32,97,32,105,115,32,115,111,114,116,101,100,46,10,10,32,32,32,32,84,104,101,32,114,101,116,117,114,110,32,118,97,108,117,101,32,105,32,105,115,32,115,117,99,104,32,116,104,97,116,32,97,108,108,32,101,32,105,110,32,97,91,58,105,93,32,104,97,118,101,32,101,32,60,32,120,44,32,97,110,100,32,97,108,108,32,101,32,105,110,10,32,32,32,32,97,91,105,58,93,32,104,97,118,101,32,101,32,62,61,32,120,46,32,32,83,111,32,105,102,32,120,32,97,108,114,101,97,100,121,32,97,112,112,101,97,114,115,32,105,110,32,116,104,101,32,108,105,115,116,44,32,97,46,105,110,115,101,114,116,40,120,41,32,119,105,108,108,10,32,32,32,32,105,110,115,101,114,116,32,106,117,115,116,32,98,101,102,111,114,101,32,116,104,101,32,108,101,102,116,109,111,115,116,32,120,32,97,108,114,101,97,100,121,32,116,104,101,114,101,46,10,10,32,32,32,32,79,112,116,105,111,110,97,108,32,97,114,103,115,32,108,111,32,40,100,101,102,97,117,108,116,32,48,41,32,97,110,100,32,104,105,32,40,100,101,102,97,117,108,116,32,108,101,110,40,97,41,41,32,98,111,117,110,100,32,116,104,101,10,32,32,32,32,115,108,105,99,101,32,111,102,32,97,32,116,111,32,98,101,32,115,101,97,114,99,104,101,100,46,10,32,32,32,32,34,34,34,10,10,32,32,32,32,105,102,32,108,111,32,60,32,48,58,10,32,32,32,32,32,32,32,32,114,97,105,115,101,32,86,97,108,117,101,69,114,114,111,114,40,39,108,111,32,109,117,115,116,32,98,101,32,110,111,110,45,110,101,103,97,116,105,118,101,39,41,10,32,32,32,32,105,102,32,104,105,32,105,115,32,78,111,110,101,58,10,32,32,32,32,32,32,32,32,104,105,32,61,32,108,101,110,40,97,41,10,32,32,32,32,119,104,105,108,101,32,108,111,32,60,32,104,105,58,10,32,32,32,32,32,32,32,32,109,105,100,32,61,32,40,108,111,43,104,105,41,47,47,50,10,32,32,32,32,32,32,32,32,105,102,32,97,91,109,105,100,93,32,60,32,120,58,32,108,111,32,61,32,109,105,100,43,49,10,32,32,32,32,32,32,32,32,101,108,115,101,58,32,104,105,32,61,32,109,105,100,10,32,32,32,32,114,101,116,117,114,110,32,108,111,10,10,35,32,67,114,101,97,116,101,32,97,108,105,97,115,101,115,10,98,105,115,101,99,116,32,61,32,98,105,115,101,99,116,95,114,105,103,104,116,10,105,110,115,111,114,116,32,61,32,105,110,115,111,114,116,95,114,105,103,104,116,10,0}; inline const char kPythonLibs_builtins[] = {105,109,112,111,114,116,32,115,121,115,32,97,115,32,95,115,121,115,10,105,109,112,111,114,116,32,111,112,101,114,97,116,111,114,32,97,115,32,95,111,112,101,114,97,116,111,114,10,10,100,101,102,32,112,114,105,110,116,40,42,97,114,103,115,44,32,115,101,112,61,39,32,39,44,32,101,110,100,61,39,92,110,39,41,58,10,32,32,32,32,115,32,61,32,115,101,112,46,106,111,105,110,40,91,115,116,114,40,105,41,32,102,111,114,32,105,32,105,110,32,97,114,103,115,93,41,10,32,32,32,32,95,115,121,115,46,115,116,100,111,117,116,46,119,114,105,116,101,40,115,32,43,32,101,110,100,41,10,10,100,101,102,32,95,109,105,110,109,97,120,95,114,101,100,117,99,101,40,111,112,44,32,97,114,103,115,44,32,107,101,121,41,58,10,32,32,32,32,105,102,32,107,101,121,32,105,115,32,78,111,110,101,58,32,10,32,32,32,32,32,32,32,32,105,102,32,108,101,110,40,97,114,103,115,41,32,61,61,32,50,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,97,114,103,115,91,48,93,32,105,102,32,111,112,40,97,114,103,115,91,48,93,44,32,97,114,103,115,91,49,93,41,32,101,108,115,101,32,97,114,103,115,91,49,93,10,32,32,32,32,32,32,32,32,107,101,121,32,61,32,108,97,109,98,100,97,32,120,58,32,120,10,32,32,32,32,105,102,32,108,101,110,40,97,114,103,115,41,32,61,61,32,48,58,10,32,32,32,32,32,32,32,32,114,97,105,115,101,32,84,121,112,101,69,114,114,111,114,40,39,101,120,112,101,99,116,101,100,32,49,32,97,114,103,117,109,101,110,116,115,44,32,103,111,116,32,48,39,41,10,32,32,32,32,105,102,32,108,101,110,40,97,114,103,115,41,32,61,61,32,49,58,10,32,32,32,32,32,32,32,32,97,114,103,115,32,61,32,97,114,103,115,91,48,93,10,32,32,32,32,97,114,103,115,32,61,32,105,116,101,114,40,97,114,103,115,41,10,32,32,32,32,114,101,115,32,61,32,110,101,120,116,40,97,114,103,115,41,10,32,32,32,32,105,102,32,114,101,115,32,105,115,32,83,116,111,112,73,116,101,114,97,116,105,111,110,58,10,32,32,32,32,32,32,32,32,114,97,105,115,101,32,86,97,108,117,101,69,114,114,111,114,40,39,97,114,103,115,32,105,115,32,97,110,32,101,109,112,116,121,32,115,101,113,117,101,110,99,101,39,41,10,32,32,32,32,119,104,105,108,101,32,84,114,117,101,58,10,32,32,32,32,32,32,32,32,105,32,61,32,110,101,120,116,40,97,114,103,115,41,10,32,32,32,32,32,32,32,32,105,102,32,105,32,105,115,32,83,116,111,112,73,116,101,114,97,116,105,111,110,58,10,32,32,32,32,32,32,32,32,32,32,32,32,98,114,101,97,107,10,32,32,32,32,32,32,32,32,105,102,32,111,112,40,107,101,121,40,105,41,44,32,107,101,121,40,114,101,115,41,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,115,32,61,32,105,10,32,32,32,32,114,101,116,117,114,110,32,114,101,115,10,10,100,101,102,32,109,105,110,40,42,97,114,103,115,44,32,107,101,121,61,78,111,110,101,41,58,10,32,32,32,32,114,101,116,117,114,110,32,95,109,105,110,109,97,120,95,114,101,100,117,99,101,40,95,111,112,101,114,97,116,111,114,46,108,116,44,32,97,114,103,115,44,32,107,101,121,41,10,10,100,101,102,32,109,97,120,40,42,97,114,103,115,44,32,107,101,121,61,78,111,110,101,41,58,10,32,32,32,32,114,101,116,117,114,110,32,95,109,105,110,109,97,120,95,114,101,100,117,99,101,40,95,111,112,101,114,97,116,111,114,46,103,116,44,32,97,114,103,115,44,32,107,101,121,41,10,10,100,101,102,32,97,108,108,40,105,116,101,114,97,98,108,101,41,58,10,32,32,32,32,102,111,114,32,105,32,105,110,32,105,116,101,114,97,98,108,101,58,10,32,32,32,32,32,32,32,32,105,102,32,110,111,116,32,105,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,70,97,108,115,101,10,32,32,32,32,114,101,116,117,114,110,32,84,114,117,101,10,10,100,101,102,32,97,110,121,40,105,116,101,114,97,98,108,101,41,58,10,32,32,32,32,102,111,114,32,105,32,105,110,32,105,116,101,114,97,98,108,101,58,10,32,32,32,32,32,32,32,32,105,102,32,105,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,84,114,117,101,10,32,32,32,32,114,101,116,117,114,110,32,70,97,108,115,101,10,10,100,101,102,32,101,110,117,109,101,114,97,116,101,40,105,116,101,114,97,98,108,101,44,32,115,116,97,114,116,61,48,41,58,10,32,32,32,32,110,32,61,32,115,116,97,114,116,10,32,32,32,32,102,111,114,32,101,108,101,109,32,105,110,32,105,116,101,114,97,98,108,101,58,10,32,32,32,32,32,32,32,32,121,105,101,108,100,32,110,44,32,101,108,101,109,10,32,32,32,32,32,32,32,32,43,43,110,10,10,100,101,102,32,115,117,109,40,105,116,101,114,97,98,108,101,41,58,10,32,32,32,32,114,101,115,32,61,32,48,10,32,32,32,32,102,111,114,32,105,32,105,110,32,105,116,101,114,97,98,108,101,58,10,32,32,32,32,32,32,32,32,114,101,115,32,43,61,32,105,10,32,32,32,32,114,101,116,117,114,110,32,114,101,115,10,10,100,101,102,32,109,97,112,40,102,44,32,105,116,101,114,97,98,108,101,41,58,10,32,32,32,32,102,111,114,32,105,32,105,110,32,105,116,101,114,97,98,108,101,58,10,32,32,32,32,32,32,32,32,121,105,101,108,100,32,102,40,105,41,10,10,100,101,102,32,102,105,108,116,101,114,40,102,44,32,105,116,101,114,97,98,108,101,41,58,10,32,32,32,32,102,111,114,32,105,32,105,110,32,105,116,101,114,97,98,108,101,58,10,32,32,32,32,32,32,32,32,105,102,32,102,40,105,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,121,105,101,108,100,32,105,10,10,100,101,102,32,122,105,112,40,97,44,32,98,41,58,10,32,32,32,32,97,32,61,32,105,116,101,114,40,97,41,10,32,32,32,32,98,32,61,32,105,116,101,114,40,98,41,10,32,32,32,32,119,104,105,108,101,32,84,114,117,101,58,10,32,32,32,32,32,32,32,32,97,105,32,61,32,110,101,120,116,40,97,41,10,32,32,32,32,32,32,32,32,98,105,32,61,32,110,101,120,116,40,98,41,10,32,32,32,32,32,32,32,32,105,102,32,97,105,32,105,115,32,83,116,111,112,73,116,101,114,97,116,105,111,110,32,111,114,32,98,105,32,105,115,32,83,116,111,112,73,116,101,114,97,116,105,111,110,58,10,32,32,32,32,32,32,32,32,32,32,32,32,98,114,101,97,107,10,32,32,32,32,32,32,32,32,121,105,101,108,100,32,97,105,44,32,98,105,10,10,100,101,102,32,114,101,118,101,114,115,101,100,40,105,116,101,114,97,98,108,101,41,58,10,32,32,32,32,97,32,61,32,108,105,115,116,40,105,116,101,114,97,98,108,101,41,10,32,32,32,32,97,46,114,101,118,101,114,115,101,40,41,10,32,32,32,32,114,101,116,117,114,110,32,97,10,10,100,101,102,32,115,111,114,116,101,100,40,105,116,101,114,97,98,108,101,44,32,107,101,121,61,78,111,110,101,44,32,114,101,118,101,114,115,101,61,70,97,108,115,101,41,58,10,32,32,32,32,97,32,61,32,108,105,115,116,40,105,116,101,114,97,98,108,101,41,10,32,32,32,32,97,46,115,111,114,116,40,107,101,121,61,107,101,121,44,32,114,101,118,101,114,115,101,61,114,101,118,101,114,115,101,41,10,32,32,32,32,114,101,116,117,114,110,32,97,10,10,35,35,35,35,35,32,115,116,114,32,35,35,35,35,35,10,100,101,102,32,95,95,102,111,114,109,97,116,95,115,116,114,105,110,103,40,115,101,108,102,58,32,115,116,114,44,32,42,97,114,103,115,44,32,42,42,107,119,97,114,103,115,41,32,45,62,32,115,116,114,58,10,32,32,32,32,100,101,102,32,116,111,107,101,110,105,122,101,83,116,114,105,110,103,40,115,58,32,115,116,114,41,58,10,32,32,32,32,32,32,32,32,116,111,107,101,110,115,32,61,32,91,93,10,32,32,32,32,32,32,32,32,76,44,32,82,32,61,32,48,44,48,10,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,109,111,100,101,32,61,32,78,111,110,101,10,32,32,32,32,32,32,32,32,99,117,114,65,114,103,32,61,32,48,10,32,32,32,32,32,32,32,32,35,32,108,111,111,107,105,110,103,70,111,114,75,119,111,114,100,32,61,32,70,97,108,115,101,10,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,119,104,105,108,101,40,82,60,108,101,110,40,115,41,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,99,117,114,67,104,97,114,32,61,32,115,91,82,93,10,32,32,32,32,32,32,32,32,32,32,32,32,110,101,120,116,67,104,97,114,32,61,32,115,91,82,43,49,93,32,105,102,32,82,43,49,60,108,101,110,40,115,41,32,101,108,115,101,32,39,39,10,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,35,32,73,110,118,97,108,105,100,32,99,97,115,101,32,49,58,32,115,116,114,97,121,32,39,125,39,32,101,110,99,111,117,110,116,101,114,101,100,44,32,101,120,97,109,112,108,101,58,32,34,65,66,67,68,32,69,70,71,72,32,123,110,97,109,101,125,32,73,74,75,76,125,34,44,32,34,72,101,108,108,111,32,123,118,118,125,125,34,44,32,34,72,69,76,76,79,32,123,48,125,32,87,79,82,76,68,125,34,10,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,99,117,114,67,104,97,114,32,61,61,32,39,125,39,32,97,110,100,32,110,101,120,116,67,104,97,114,32,33,61,32,39,125,39,58,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,114,97,105,115,101,32,86,97,108,117,101,69,114,114,111,114,40,34,83,105,110,103,108,101,32,39,125,39,32,101,110,99,111,117,110,116,101,114,101,100,32,105,110,32,102,111,114,109,97,116,32,115,116,114,105,110,103,34,41,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,35,32,86,97,108,105,100,32,67,97,115,101,32,49,58,32,69,115,99,97,112,105,110,103,32,99,97,115,101,44,32,119,101,32,101,115,99,97,112,101,32,34,123,123,32,111,114,32,34,125,125,34,32,116,111,32,98,101,32,34,123,34,32,111,114,32,34,125,34,44,32,101,120,97,109,112,108,101,58,32,34,123,123,125,125,34,44,32,34,123,123,77,121,32,78,97,109,101,32,105,115,32,123,48,125,125,125,34,10,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,40,99,117,114,67,104,97,114,32,61,61,32,39,123,39,32,97,110,100,32,110,101,120,116,67,104,97,114,32,61,61,32,39,123,39,41,32,111,114,32,40,99,117,114,67,104,97,114,32,61,61,32,39,125,39,32,97,110,100,32,110,101,120,116,67,104,97,114,32,61,61,32,39,125,39,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,40,76,60,82,41,58,32,35,32,86,97,108,105,100,32,67,97,115,101,32,49,46,49,58,32,109,97,107,101,32,115,117,114,101,32,119,101,32,97,114,101,32,110,111,116,32,97,100,100,105,110,103,32,101,109,112,116,121,32,115,116,114,105,110,103,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,116,111,107,101,110,115,46,97,112,112,101,110,100,40,115,91,76,58,82,93,41,32,35,32,97,100,100,32,116,104,101,32,115,116,114,105,110,103,32,98,101,102,111,114,101,32,116,104,101,32,101,115,99,97,112,101,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,116,111,107,101,110,115,46,97,112,112,101,110,100,40,99,117,114,67,104,97,114,41,32,35,32,86,97,108,105,100,32,67,97,115,101,32,49,46,50,58,32,97,100,100,32,116,104,101,32,101,115,99,97,112,101,32,99,104,97,114,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,76,32,61,32,82,43,50,32,35,32,109,111,118,101,32,116,104,101,32,108,101,102,116,32,112,111,105,110,116,101,114,32,116,111,32,116,104,101,32,110,101,120,116,32,99,104,97,114,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,82,32,61,32,82,43,50,32,35,32,109,111,118,101,32,116,104,101,32,114,105,103,104,116,32,112,111,105,110,116,101,114,32,116,111,32,116,104,101,32,110,101,120,116,32,99,104,97,114,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,110,116,105,110,117,101,10,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,35,32,86,97,108,105,100,32,67,97,115,101,32,50,58,32,82,101,103,117,108,97,114,32,99,111,109,109,97,110,100,32,108,105,110,101,32,97,114,103,32,99,97,115,101,58,32,101,120,97,109,112,108,101,58,32,32,34,65,66,67,68,32,69,70,71,72,32,123,125,32,73,74,75,76,34,44,32,34,123,125,34,44,32,34,72,69,76,76,79,32,123,125,32,87,79,82,76,68,34,10,32,32,32,32,32,32,32,32,32,32,32,32,101,108,105,102,32,99,117,114,67,104,97,114,32,61,61,32,39,123,39,32,97,110,100,32,110,101,120,116,67,104,97,114,32,61,61,32,39,125,39,58,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,109,111,100,101,32,105,115,32,110,111,116,32,78,111,110,101,32,97,110,100,32,109,111,100,101,32,33,61,32,39,97,117,116,111,39,58,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,73,110,118,97,108,105,100,32,99,97,115,101,32,50,58,32,109,105,120,105,110,103,32,97,117,116,111,109,97,116,105,99,32,97,110,100,32,109,97,110,117,97,108,32,102,105,101,108,100,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,32,45,45,32,101,120,97,109,112,108,101,58,32,34,65,66,67,68,32,69,70,71,72,32,123,110,97,109,101,125,32,73,74,75,76,32,123,125,34,44,32,34,72,101,108,108,111,32,123,118,118,125,32,123,125,34,44,32,34,72,69,76,76,79,32,123,48,125,32,87,79,82,76,68,32,123,125,34,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,114,97,105,115,101,32,86,97,108,117,101,69,114,114,111,114,40,34,67,97,110,110,111,116,32,115,119,105,116,99,104,32,102,114,111,109,32,109,97,110,117,97,108,32,102,105,101,108,100,32,110,117,109,98,101,114,105,110,103,32,116,111,32,97,117,116,111,109,97,116,105,99,32,102,105,101,108,100,32,115,112,101,99,105,102,105,99,97,116,105,111,110,34,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,109,111,100,101,32,61,32,39,97,117,116,111,39,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,105,102,40,76,60,82,41,58,32,35,32,86,97,108,105,100,32,67,97,115,101,32,50,46,49,58,32,109,97,107,101,32,115,117,114,101,32,119,101,32,97,114,101,32,110,111,116,32,97,100,100,105,110,103,32,101,109,112,116,121,32,115,116,114,105,110,103,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,116,111,107,101,110,115,46,97,112,112,101,110,100,40,115,91,76,58,82,93,41,32,35,32,97,100,100,32,116,104,101,32,115,116,114,105,110,103,32,98,101,102,111,114,101,32,116,104,101,32,115,112,101,99,105,97,108,32,109,97,114,107,101,114,32,102,111,114,32,116,104,101,32,97,114,103,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,116,111,107,101,110,115,46,97,112,112,101,110,100,40,34,123,34,43,115,116,114,40,99,117,114,65,114,103,41,43,34,125,34,41,32,35,32,86,97,108,105,100,32,67,97,115,101,32,50,46,50,58,32,97,100,100,32,116,104,101,32,115,112,101,99,105,97,108,32,109,97,114,107,101,114,32,102,111,114,32,116,104,101,32,97,114,103,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,117,114,65,114,103,43,61,49,32,35,32,105,110,99,114,101,109,101,110,116,32,116,104,101,32,97,114,103,32,112,111,115,105,116,105,111,110,44,32,116,104,105,115,32,119,105,108,108,32,98,101,32,117,115,101,100,32,102,111,114,32,114,101,102,101,114,101,110,99,105,110,103,32,116,104,101,32,97,114,103,32,108,97,116,101,114,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,76,32,61,32,82,43,50,32,35,32,109,111,118,101,32,116,104,101,32,108,101,102,116,32,112,111,105,110,116,101,114,32,116,111,32,116,104,101,32,110,101,120,116,32,99,104,97,114,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,82,32,61,32,82,43,50,32,35,32,109,111,118,101,32,116,104,101,32,114,105,103,104,116,32,112,111,105,110,116,101,114,32,116,111,32,116,104,101,32,110,101,120,116,32,99,104,97,114,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,110,116,105,110,117,101,10,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,35,32,86,97,108,105,100,32,67,97,115,101,32,51,58,32,75,101,121,45,119,111,114,100,32,97,114,103,32,99,97,115,101,58,32,101,120,97,109,112,108,101,58,32,34,65,66,67,68,32,69,70,71,72,32,123,110,97,109,101,125,32,73,74,75,76,34,44,32,34,72,101,108,108,111,32,123,118,118,125,34,44,32,34,72,69,76,76,79,32,123,110,97,109,101,125,32,87,79,82,76,68,34,10,32,32,32,32,32,32,32,32,32,32,32,32,101,108,105,102,32,40,99,117,114,67,104,97,114,32,61,61,32,39,123,39,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,109,111,100,101,32,105,115,32,110,111,116,32,78,111,110,101,32,97,110,100,32,109,111,100,101,32,33,61,32,39,109,97,110,117,97,108,39,58,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,35,32,73,110,118,97,108,105,100,32,99,97,115,101,32,50,58,32,109,105,120,105,110,103,32,97,117,116,111,109,97,116,105,99,32,97,110,100,32,109,97,110,117,97,108,32,102,105,101,108,100,32,115,112,101,99,105,102,105,99,97,116,105,111,110,115,32,45,45,32,101,120,97,109,112,108,101,58,32,34,65,66,67,68,32,69,70,71,72,32,123,125,32,73,74,75,76,32,123,110,97,109,101,125,34,44,32,34,72,101,108,108,111,32,123,125,32,123,49,125,34,44,32,34,72,69,76,76,79,32,123,125,32,87,79,82,76,68,32,123,110,97,109,101,125,34,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,114,97,105,115,101,32,86,97,108,117,101,69,114,114,111,114,40,34,67,97,110,110,111,116,32,115,119,105,116,99,104,32,102,114,111,109,32,97,117,116,111,109,97,116,105,99,32,102,105,101,108,100,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,116,111,32,109,97,110,117,97,108,32,102,105,101,108,100,32,110,117,109,98,101,114,105,110,103,34,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,109,111,100,101,32,61,32,39,109,97,110,117,97,108,39,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,105,102,40,76,60,82,41,58,32,35,32,86,97,108,105,100,32,99,97,115,101,32,51,46,49,58,32,109,97,107,101,32,115,117,114,101,32,119,101,32,97,114,101,32,110,111,116,32,97,100,100,105,110,103,32,101,109,112,116,121,32,115,116,114,105,110,103,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,116,111,107,101,110,115,46,97,112,112,101,110,100,40,115,91,76,58,82,93,41,32,35,32,97,100,100,32,116,104,101,32,115,116,114,105,110,103,32,98,101,102,111,114,101,32,116,104,101,32,115,112,101,99,105,97,108,32,109,97,114,107,101,114,32,102,111,114,32,116,104,101,32,97,114,103,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,87,101,32,108,111,111,107,32,102,111,114,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,107,101,121,119,111,114,100,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,107,119,76,32,61,32,82,32,35,32,75,101,121,119,111,114,100,32,108,101,102,116,32,112,111,105,110,116,101,114,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,107,119,82,32,61,32,82,43,49,32,35,32,75,101,121,119,111,114,100,32,114,105,103,104,116,32,112,111,105,110,116,101,114,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,119,104,105,108,101,40,107,119,82,60,108,101,110,40,115,41,32,97,110,100,32,115,91,107,119,82,93,33,61,39,125,39,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,115,91,107,119,82,93,32,61,61,32,39,123,39,58,32,35,32,73,110,118,97,108,105,100,32,99,97,115,101,32,51,58,32,115,116,114,97,121,32,39,123,39,32,101,110,99,111,117,110,116,101,114,101,100,44,32,101,120,97,109,112,108,101,58,32,34,65,66,67,68,32,69,70,71,72,32,123,110,123,97,109,101,125,32,73,74,75,76,32,123,34,44,32,34,72,101,108,108,111,32,123,118,118,123,125,125,34,44,32,34,72,69,76,76,79,32,123,48,125,32,87,79,82,123,76,68,125,34,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,114,97,105,115,101,32,86,97,108,117,101,69,114,114,111,114,40,34,85,110,101,120,112,101,99,116,101,100,32,39,123,39,32,105,110,32,102,105,101,108,100,32,110,97,109,101,34,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,107,119,82,32,43,61,32,49,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,86,97,108,105,100,32,99,97,115,101,32,51,46,50,58,32,87,101,32,104,97,118,101,32,115,117,99,99,101,115,115,102,117,108,108,121,32,102,111,117,110,100,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,107,101,121,119,111,114,100,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,107,119,82,60,108,101,110,40,115,41,32,97,110,100,32,115,91,107,119,82,93,32,61,61,32,39,125,39,58,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,116,111,107,101,110,115,46,97,112,112,101,110,100,40,115,91,107,119,76,58,107,119,82,43,49,93,41,32,35,32,97,100,100,32,116,104,101,32,115,112,101,99,105,97,108,32,109,97,114,107,101,114,32,102,111,114,32,116,104,101,32,97,114,103,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,76,32,61,32,107,119,82,43,49,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,82,32,61,32,107,119,82,43,49,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,73,110,118,97,108,105,100,32,99,97,115,101,32,52,58,32,87,101,32,100,105,100,110,39,116,32,102,105,110,100,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,107,101,121,119,111,114,100,44,32,116,104,114,111,119,32,101,114,114,111,114,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,101,108,115,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,114,97,105,115,101,32,86,97,108,117,101,69,114,114,111,114,40,34,69,120,112,101,99,116,101,100,32,39,125,39,32,98,101,102,111,114,101,32,101,110,100,32,111,102,32,115,116,114,105,110,103,34,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,110,116,105,110,117,101,10,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,82,32,61,32,82,43,49,10,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,35,32,86,97,108,105,100,32,99,97,115,101,32,52,58,32,87,101,32,104,97,118,101,32,114,101,97,99,104,101,100,32,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,116,114,105,110,103,44,32,97,100,100,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,115,116,114,105,110,103,32,116,111,32,116,104,101,32,116,111,107,101,110,115,32,10,32,32,32,32,32,32,32,32,105,102,32,76,60,82,58,10,32,32,32,32,32,32,32,32,32,32,32,32,116,111,107,101,110,115,46,97,112,112,101,110,100,40,115,91,76,58,82,93,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,35,32,112,114,105,110,116,40,116,111,107,101,110,115,41,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,116,111,107,101,110,115,10,10,32,32,32,32,116,111,107,101,110,115,32,61,32,116,111,107,101,110,105,122,101,83,116,114,105,110,103,40,115,101,108,102,41,10,32,32,32,32,97,114,103,77,97,112,32,61,32,123,125,10,32,32,32,32,102,111,114,32,105,44,32,97,32,105,110,32,101,110,117,109,101,114,97,116,101,40,97,114,103,115,41,58,10,32,32,32,32,32,32,32,32,97,114,103,77,97,112,91,115,116,114,40,105,41,93,32,61,32,97,10,32,32,32,32,102,105,110,97,108,95,116,111,107,101,110,115,32,61,32,91,93,10,32,32,32,32,102,111,114,32,116,32,105,110,32,116,111,107,101,110,115,58,10,32,32,32,32,32,32,32,32,105,102,32,116,91,48,93,32,61,61,32,39,123,39,32,97,110,100,32,116,91,45,49,93,32,61,61,32,39,125,39,58,10,32,32,32,32,32,32,32,32,32,32,32,32,107,101,121,32,61,32,116,91,49,58,45,49,93,10,32,32,32,32,32,32,32,32,32,32,32,32,97,114,103,77,97,112,86,97,108,32,61,32,97,114,103,77,97,112,46,103,101,116,40,107,101,121,44,32,78,111,110,101,41,10,32,32,32,32,32,32,32,32,32,32,32,32,107,119,97,114,103,115,86,97,108,32,61,32,107,119,97,114,103,115,46,103,101,116,40,107,101,121,44,32,78,111,110,101,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,97,114,103,77,97,112,86,97,108,32,105,115,32,78,111,110,101,32,97,110,100,32,107,119,97,114,103,115,86,97,108,32,105,115,32,78,111,110,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,114,97,105,115,101,32,86,97,108,117,101,69,114,114,111,114,40,34,78,111,32,97,114,103,32,102,111,117,110,100,32,102,111,114,32,116,111,107,101,110,58,32,34,43,116,41,10,32,32,32,32,32,32,32,32,32,32,32,32,101,108,105,102,32,97,114,103,77,97,112,86,97,108,32,105,115,32,110,111,116,32,78,111,110,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,102,105,110,97,108,95,116,111,107,101,110,115,46,97,112,112,101,110,100,40,115,116,114,40,97,114,103,77,97,112,86,97,108,41,41,10,32,32,32,32,32,32,32,32,32,32,32,32,101,108,115,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,102,105,110,97,108,95,116,111,107,101,110,115,46,97,112,112,101,110,100,40,115,116,114,40,107,119,97,114,103,115,86,97,108,41,41,10,32,32,32,32,32,32,32,32,101,108,115,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,102,105,110,97,108,95,116,111,107,101,110,115,46,97,112,112,101,110,100,40,116,41,10,32,32,32,32,10,32,32,32,32,114,101,116,117,114,110,32,39,39,46,106,111,105,110,40,102,105,110,97,108,95,116,111,107,101,110,115,41,10,10,115,116,114,46,102,111,114,109,97,116,32,61,32,95,95,102,111,114,109,97,116,95,115,116,114,105,110,103,10,100,101,108,32,95,95,102,111,114,109,97,116,95,115,116,114,105,110,103,10,10,10,100,101,102,32,104,101,108,112,40,111,98,106,41,58,10,32,32,32,32,105,102,32,104,97,115,97,116,116,114,40,111,98,106,44,32,39,95,95,102,117,110,99,95,95,39,41,58,10,32,32,32,32,32,32,32,32,111,98,106,32,61,32,111,98,106,46,95,95,102,117,110,99,95,95,10,32,32,32,32,112,114,105,110,116,40,111,98,106,46,95,95,115,105,103,110,97,116,117,114,101,95,95,41,10,32,32,32,32,112,114,105,110,116,40,111,98,106,46,95,95,100,111,99,95,95,41,10,10,100,101,102,32,99,111,109,112,108,101,120,40,42,97,114,103,115,44,32,42,42,107,119,97,114,103,115,41,58,10,32,32,32,32,105,109,112,111,114,116,32,99,109,97,116,104,10,32,32,32,32,114,101,116,117,114,110,32,99,109,97,116,104,46,99,111,109,112,108,101,120,40,42,97,114,103,115,44,32,42,42,107,119,97,114,103,115,41,10,10,100,101,102,32,108,111,110,103,40,42,97,114,103,115,44,32,42,42,107,119,97,114,103,115,41,58,10,32,32,32,32,105,109,112,111,114,116,32,95,108,111,110,103,10,32,32,32,32,114,101,116,117,114,110,32,95,108,111,110,103,46,108,111,110,103,40,42,97,114,103,115,44,32,42,42,107,119,97,114,103,115,41,10,10,10,35,32,98,117,105,108,116,105,110,32,101,120,99,101,112,116,105,111,110,115,10,99,108,97,115,115,32,83,116,97,99,107,79,118,101,114,102,108,111,119,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,32,112,97,115,115,10,99,108,97,115,115,32,73,79,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,32,112,97,115,115,10,99,108,97,115,115,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,32,112,97,115,115,10,99,108,97,115,115,32,84,121,112,101,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,32,112,97,115,115,10,99,108,97,115,115,32,73,110,100,101,120,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,32,112,97,115,115,10,99,108,97,115,115,32,86,97,108,117,101,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,32,112,97,115,115,10,99,108,97,115,115,32,82,117,110,116,105,109,101,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,32,112,97,115,115,10,99,108,97,115,115,32,90,101,114,111,68,105,118,105,115,105,111,110,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,32,112,97,115,115,10,99,108,97,115,115,32,78,97,109,101,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,32,112,97,115,115,10,99,108,97,115,115,32,85,110,98,111,117,110,100,76,111,99,97,108,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,32,112,97,115,115,10,99,108,97,115,115,32,65,116,116,114,105,98,117,116,101,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,32,112,97,115,115,10,99,108,97,115,115,32,73,109,112,111,114,116,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,32,112,97,115,115,10,99,108,97,115,115,32,65,115,115,101,114,116,105,111,110,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,32,112,97,115,115,10,10,99,108,97,115,115,32,75,101,121,69,114,114,111,114,40,69,120,99,101,112,116,105,111,110,41,58,10,32,32,32,32,100,101,102,32,95,95,105,110,105,116,95,95,40,115,101,108,102,44,32,107,101,121,61,46,46,46,41,58,10,32,32,32,32,32,32,32,32,115,101,108,102,46,107,101,121,32,61,32,107,101,121,10,32,32,32,32,32,32,32,32,105,102,32,107,101,121,32,105,115,32,46,46,46,58,10,32,32,32,32,32,32,32,32,32,32,32,32,115,117,112,101,114,40,41,46,95,95,105,110,105,116,95,95,40,41,10,32,32,32,32,32,32,32,32,101,108,115,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,115,117,112,101,114,40,41,46,95,95,105,110,105,116,95,95,40,114,101,112,114,40,107,101,121,41,41,10,10,32,32,32,32,100,101,102,32,95,95,115,116,114,95,95,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,105,102,32,115,101,108,102,46,107,101,121,32,105,115,32,46,46,46,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,39,39,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,116,114,40,115,101,108,102,46,107,101,121,41,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,114,101,112,114,95,95,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,105,102,32,115,101,108,102,46,107,101,121,32,105,115,32,46,46,46,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,39,75,101,121,69,114,114,111,114,40,41,39,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,102,39,75,101,121,69,114,114,111,114,40,123,115,101,108,102,46,107,101,121,33,114,125,41,39,10,0}; inline const char kPythonLibs_cmath[] = {105,109,112,111,114,116,32,109,97,116,104,10,10,99,108,97,115,115,32,99,111,109,112,108,101,120,58,10,32,32,32,32,100,101,102,32,95,95,105,110,105,116,95,95,40,115,101,108,102,44,32,114,101,97,108,44,32,105,109,97,103,61,48,41,58,10,32,32,32,32,32,32,32,32,115,101,108,102,46,95,114,101,97,108,32,61,32,102,108,111,97,116,40,114,101,97,108,41,10,32,32,32,32,32,32,32,32,115,101,108,102,46,95,105,109,97,103,32,61,32,102,108,111,97,116,40,105,109,97,103,41,10,10,32,32,32,32,64,112,114,111,112,101,114,116,121,10,32,32,32,32,100,101,102,32,114,101,97,108,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,95,114,101,97,108,10,32,32,32,32,10,32,32,32,32,64,112,114,111,112,101,114,116,121,10,32,32,32,32,100,101,102,32,105,109,97,103,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,95,105,109,97,103,10,10,32,32,32,32,100,101,102,32,99,111,110,106,117,103,97,116,101,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,111,109,112,108,101,120,40,115,101,108,102,46,114,101,97,108,44,32,45,115,101,108,102,46,105,109,97,103,41,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,114,101,112,114,95,95,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,115,32,61,32,91,39,40,39,44,32,115,116,114,40,115,101,108,102,46,114,101,97,108,41,93,10,32,32,32,32,32,32,32,32,115,46,97,112,112,101,110,100,40,39,45,39,32,105,102,32,115,101,108,102,46,105,109,97,103,32,60,32,48,32,101,108,115,101,32,39,43,39,41,10,32,32,32,32,32,32,32,32,115,46,97,112,112,101,110,100,40,115,116,114,40,97,98,115,40,115,101,108,102,46,105,109,97,103,41,41,41,10,32,32,32,32,32,32,32,32,115,46,97,112,112,101,110,100,40,39,106,41,39,41,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,39,39,46,106,111,105,110,40,115,41,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,101,113,95,95,40,115,101,108,102,44,32,111,116,104,101,114,41,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,99,111,109,112,108,101,120,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,114,101,97,108,32,61,61,32,111,116,104,101,114,46,114,101,97,108,32,97,110,100,32,115,101,108,102,46,105,109,97,103,32,61,61,32,111,116,104,101,114,46,105,109,97,103,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,110,32,40,105,110,116,44,32,102,108,111,97,116,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,114,101,97,108,32,61,61,32,111,116,104,101,114,32,97,110,100,32,115,101,108,102,46,105,109,97,103,32,61,61,32,48,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,97,100,100,95,95,40,115,101,108,102,44,32,111,116,104,101,114,41,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,99,111,109,112,108,101,120,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,111,109,112,108,101,120,40,115,101,108,102,46,114,101,97,108,32,43,32,111,116,104,101,114,46,114,101,97,108,44,32,115,101,108,102,46,105,109,97,103,32,43,32,111,116,104,101,114,46,105,109,97,103,41,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,110,32,40,105,110,116,44,32,102,108,111,97,116,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,111,109,112,108,101,120,40,115,101,108,102,46,114,101,97,108,32,43,32,111,116,104,101,114,44,32,115,101,108,102,46,105,109,97,103,41,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,114,97,100,100,95,95,40,115,101,108,102,44,32,111,116,104,101,114,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,95,95,97,100,100,95,95,40,111,116,104,101,114,41,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,115,117,98,95,95,40,115,101,108,102,44,32,111,116,104,101,114,41,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,99,111,109,112,108,101,120,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,111,109,112,108,101,120,40,115,101,108,102,46,114,101,97,108,32,45,32,111,116,104,101,114,46,114,101,97,108,44,32,115,101,108,102,46,105,109,97,103,32,45,32,111,116,104,101,114,46,105,109,97,103,41,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,110,32,40,105,110,116,44,32,102,108,111,97,116,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,111,109,112,108,101,120,40,115,101,108,102,46,114,101,97,108,32,45,32,111,116,104,101,114,44,32,115,101,108,102,46,105,109,97,103,41,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,114,115,117,98,95,95,40,115,101,108,102,44,32,111,116,104,101,114,41,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,99,111,109,112,108,101,120,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,111,109,112,108,101,120,40,111,116,104,101,114,46,114,101,97,108,32,45,32,115,101,108,102,46,114,101,97,108,44,32,111,116,104,101,114,46,105,109,97,103,32,45,32,115,101,108,102,46,105,109,97,103,41,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,110,32,40,105,110,116,44,32,102,108,111,97,116,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,111,109,112,108,101,120,40,111,116,104,101,114,32,45,32,115,101,108,102,46,114,101,97,108,44,32,45,115,101,108,102,46,105,109,97,103,41,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,109,117,108,95,95,40,115,101,108,102,44,32,111,116,104,101,114,41,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,99,111,109,112,108,101,120,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,111,109,112,108,101,120,40,115,101,108,102,46,114,101,97,108,32,42,32,111,116,104,101,114,46,114,101,97,108,32,45,32,115,101,108,102,46,105,109,97,103,32,42,32,111,116,104,101,114,46,105,109,97,103,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,115,101,108,102,46,114,101,97,108,32,42,32,111,116,104,101,114,46,105,109,97,103,32,43,32,115,101,108,102,46,105,109,97,103,32,42,32,111,116,104,101,114,46,114,101,97,108,41,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,110,32,40,105,110,116,44,32,102,108,111,97,116,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,111,109,112,108,101,120,40,115,101,108,102,46,114,101,97,108,32,42,32,111,116,104,101,114,44,32,115,101,108,102,46,105,109,97,103,32,42,32,111,116,104,101,114,41,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,114,109,117,108,95,95,40,115,101,108,102,44,32,111,116,104,101,114,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,95,95,109,117,108,95,95,40,111,116,104,101,114,41,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,116,114,117,101,100,105,118,95,95,40,115,101,108,102,44,32,111,116,104,101,114,41,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,99,111,109,112,108,101,120,58,10,32,32,32,32,32,32,32,32,32,32,32,32,100,101,110,111,109,105,110,97,116,111,114,32,61,32,111,116,104,101,114,46,114,101,97,108,32,42,42,32,50,32,43,32,111,116,104,101,114,46,105,109,97,103,32,42,42,32,50,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,97,108,95,112,97,114,116,32,61,32,40,115,101,108,102,46,114,101,97,108,32,42,32,111,116,104,101,114,46,114,101,97,108,32,43,32,115,101,108,102,46,105,109,97,103,32,42,32,111,116,104,101,114,46,105,109,97,103,41,32,47,32,100,101,110,111,109,105,110,97,116,111,114,10,32,32,32,32,32,32,32,32,32,32,32,32,105,109,97,103,95,112,97,114,116,32,61,32,40,115,101,108,102,46,105,109,97,103,32,42,32,111,116,104,101,114,46,114,101,97,108,32,45,32,115,101,108,102,46,114,101,97,108,32,42,32,111,116,104,101,114,46,105,109,97,103,41,32,47,32,100,101,110,111,109,105,110,97,116,111,114,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,111,109,112,108,101,120,40,114,101,97,108,95,112,97,114,116,44,32,105,109,97,103,95,112,97,114,116,41,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,110,32,40,105,110,116,44,32,102,108,111,97,116,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,111,109,112,108,101,120,40,115,101,108,102,46,114,101,97,108,32,47,32,111,116,104,101,114,44,32,115,101,108,102,46,105,109,97,103,32,47,32,111,116,104,101,114,41,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,112,111,119,95,95,40,115,101,108,102,44,32,111,116,104,101,114,58,32,105,110,116,32,124,32,102,108,111,97,116,41,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,110,32,40,105,110,116,44,32,102,108,111,97,116,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,111,109,112,108,101,120,40,115,101,108,102,46,95,95,97,98,115,95,95,40,41,32,42,42,32,111,116,104,101,114,32,42,32,109,97,116,104,46,99,111,115,40,111,116,104,101,114,32,42,32,112,104,97,115,101,40,115,101,108,102,41,41,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,115,101,108,102,46,95,95,97,98,115,95,95,40,41,32,42,42,32,111,116,104,101,114,32,42,32,109,97,116,104,46,115,105,110,40,111,116,104,101,114,32,42,32,112,104,97,115,101,40,115,101,108,102,41,41,41,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,97,98,115,95,95,40,115,101,108,102,41,32,45,62,32,102,108,111,97,116,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,109,97,116,104,46,115,113,114,116,40,115,101,108,102,46,114,101,97,108,32,42,42,32,50,32,43,32,115,101,108,102,46,105,109,97,103,32,42,42,32,50,41,10,10,32,32,32,32,100,101,102,32,95,95,110,101,103,95,95,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,111,109,112,108,101,120,40,45,115,101,108,102,46,114,101,97,108,44,32,45,115,101,108,102,46,105,109,97,103,41,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,104,97,115,104,95,95,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,104,97,115,104,40,40,115,101,108,102,46,114,101,97,108,44,32,115,101,108,102,46,105,109,97,103,41,41,10,10,10,35,32,67,111,110,118,101,114,115,105,111,110,115,32,116,111,32,97,110,100,32,102,114,111,109,32,112,111,108,97,114,32,99,111,111,114,100,105,110,97,116,101,115,10,10,100,101,102,32,112,104,97,115,101,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,109,97,116,104,46,97,116,97,110,50,40,122,46,105,109,97,103,44,32,122,46,114,101,97,108,41,10,10,100,101,102,32,112,111,108,97,114,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,122,46,95,95,97,98,115,95,95,40,41,44,32,112,104,97,115,101,40,122,41,10,10,100,101,102,32,114,101,99,116,40,114,58,32,102,108,111,97,116,44,32,112,104,105,58,32,102,108,111,97,116,41,58,10,32,32,32,32,114,101,116,117,114,110,32,114,32,42,32,109,97,116,104,46,99,111,115,40,112,104,105,41,32,43,32,114,32,42,32,109,97,116,104,46,115,105,110,40,112,104,105,41,32,42,32,49,106,10,10,35,32,80,111,119,101,114,32,97,110,100,32,108,111,103,97,114,105,116,104,109,105,99,32,102,117,110,99,116,105,111,110,115,10,10,100,101,102,32,101,120,112,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,109,97,116,104,46,101,120,112,40,122,46,114,101,97,108,41,32,42,32,114,101,99,116,40,49,44,32,122,46,105,109,97,103,41,10,10,100,101,102,32,108,111,103,40,122,58,32,99,111,109,112,108,101,120,44,32,98,97,115,101,61,50,46,55,49,56,50,56,49,56,50,56,52,53,57,48,52,53,41,58,10,32,32,32,32,114,101,116,117,114,110,32,109,97,116,104,46,108,111,103,40,122,46,95,95,97,98,115,95,95,40,41,44,32,98,97,115,101,41,32,43,32,112,104,97,115,101,40,122,41,32,42,32,49,106,10,10,100,101,102,32,108,111,103,49,48,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,108,111,103,40,122,44,32,49,48,41,10,10,100,101,102,32,115,113,114,116,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,122,32,42,42,32,48,46,53,10,10,35,32,84,114,105,103,111,110,111,109,101,116,114,105,99,32,102,117,110,99,116,105,111,110,115,10,10,100,101,102,32,97,99,111,115,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,45,49,106,32,42,32,108,111,103,40,122,32,43,32,115,113,114,116,40,122,32,42,32,122,32,45,32,49,41,41,10,10,100,101,102,32,97,115,105,110,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,45,49,106,32,42,32,108,111,103,40,49,106,32,42,32,122,32,43,32,115,113,114,116,40,49,32,45,32,122,32,42,32,122,41,41,10,10,100,101,102,32,97,116,97,110,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,49,106,32,47,32,50,32,42,32,108,111,103,40,40,49,32,45,32,49,106,32,42,32,122,41,32,47,32,40,49,32,43,32,49,106,32,42,32,122,41,41,10,10,100,101,102,32,99,111,115,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,40,101,120,112,40,122,41,32,43,32,101,120,112,40,45,122,41,41,32,47,32,50,10,10,100,101,102,32,115,105,110,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,40,101,120,112,40,122,41,32,45,32,101,120,112,40,45,122,41,41,32,47,32,40,50,32,42,32,49,106,41,10,10,100,101,102,32,116,97,110,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,115,105,110,40,122,41,32,47,32,99,111,115,40,122,41,10,10,35,32,72,121,112,101,114,98,111,108,105,99,32,102,117,110,99,116,105,111,110,115,10,10,100,101,102,32,97,99,111,115,104,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,108,111,103,40,122,32,43,32,115,113,114,116,40,122,32,42,32,122,32,45,32,49,41,41,10,10,100,101,102,32,97,115,105,110,104,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,108,111,103,40,122,32,43,32,115,113,114,116,40,122,32,42,32,122,32,43,32,49,41,41,10,10,100,101,102,32,97,116,97,110,104,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,49,32,47,32,50,32,42,32,108,111,103,40,40,49,32,43,32,122,41,32,47,32,40,49,32,45,32,122,41,41,10,10,100,101,102,32,99,111,115,104,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,40,101,120,112,40,122,41,32,43,32,101,120,112,40,45,122,41,41,32,47,32,50,10,10,100,101,102,32,115,105,110,104,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,40,101,120,112,40,122,41,32,45,32,101,120,112,40,45,122,41,41,32,47,32,50,10,10,100,101,102,32,116,97,110,104,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,115,105,110,104,40,122,41,32,47,32,99,111,115,104,40,122,41,10,10,35,32,67,108,97,115,115,105,102,105,99,97,116,105,111,110,32,102,117,110,99,116,105,111,110,115,10,10,100,101,102,32,105,115,102,105,110,105,116,101,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,109,97,116,104,46,105,115,102,105,110,105,116,101,40,122,46,114,101,97,108,41,32,97,110,100,32,109,97,116,104,46,105,115,102,105,110,105,116,101,40,122,46,105,109,97,103,41,10,10,100,101,102,32,105,115,105,110,102,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,109,97,116,104,46,105,115,105,110,102,40,122,46,114,101,97,108,41,32,111,114,32,109,97,116,104,46,105,115,105,110,102,40,122,46,105,109,97,103,41,10,10,100,101,102,32,105,115,110,97,110,40,122,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,109,97,116,104,46,105,115,110,97,110,40,122,46,114,101,97,108,41,32,111,114,32,109,97,116,104,46,105,115,110,97,110,40,122,46,105,109,97,103,41,10,10,100,101,102,32,105,115,99,108,111,115,101,40,97,58,32,99,111,109,112,108,101,120,44,32,98,58,32,99,111,109,112,108,101,120,41,58,10,32,32,32,32,114,101,116,117,114,110,32,109,97,116,104,46,105,115,99,108,111,115,101,40,97,46,114,101,97,108,44,32,98,46,114,101,97,108,41,32,97,110,100,32,109,97,116,104,46,105,115,99,108,111,115,101,40,97,46,105,109,97,103,44,32,98,46,105,109,97,103,41,10,10,35,32,67,111,110,115,116,97,110,116,115,10,10,112,105,32,61,32,109,97,116,104,46,112,105,10,101,32,61,32,109,97,116,104,46,101,10,116,97,117,32,61,32,50,32,42,32,112,105,10,105,110,102,32,61,32,109,97,116,104,46,105,110,102,10,105,110,102,106,32,61,32,99,111,109,112,108,101,120,40,48,44,32,105,110,102,41,10,110,97,110,32,61,32,109,97,116,104,46,110,97,110,10,110,97,110,106,32,61,32,99,111,109,112,108,101,120,40,48,44,32,110,97,110,41,10,0}; - inline const char kPythonLibs_collections[] = {100,101,102,32,67,111,117,110,116,101,114,40,105,116,101,114,97,98,108,101,41,58,10,32,32,32,32,97,32,61,32,123,125,10,32,32,32,32,102,111,114,32,120,32,105,110,32,105,116,101,114,97,98,108,101,58,10,32,32,32,32,32,32,32,32,105,102,32,120,32,105,110,32,97,58,10,32,32,32,32,32,32,32,32,32,32,32,32,97,91,120,93,32,43,61,32,49,10,32,32,32,32,32,32,32,32,101,108,115,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,97,91,120,93,32,61,32,49,10,32,32,32,32,114,101,116,117,114,110,32,97,10,10,99,108,97,115,115,32,100,101,102,97,117,108,116,100,105,99,116,58,10,32,32,32,32,100,101,102,32,95,95,105,110,105,116,95,95,40,115,101,108,102,44,32,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,41,32,45,62,32,78,111,110,101,58,10,32,32,32,32,32,32,32,32,115,101,108,102,46,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,32,61,32,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,10,32,32,32,32,32,32,32,32,115,101,108,102,46,95,97,32,61,32,123,125,10,10,32,32,32,32,100,101,102,32,95,95,103,101,116,105,116,101,109,95,95,40,115,101,108,102,44,32,107,101,121,41,58,10,32,32,32,32,32,32,32,32,105,102,32,107,101,121,32,110,111,116,32,105,110,32,115,101,108,102,46,95,97,58,10,32,32,32,32,32,32,32,32,32,32,32,32,115,101,108,102,46,95,97,91,107,101,121,93,32,61,32,115,101,108,102,46,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,40,41,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,95,97,91,107,101,121,93,10,32,32,32,32,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,115,101,116,105,116,101,109,95,95,40,115,101,108,102,44,32,107,101,121,44,32,118,97,108,117,101,41,58,10,32,32,32,32,32,32,32,32,115,101,108,102,46,95,97,91,107,101,121,93,32,61,32,118,97,108,117,101,10,10,32,32,32,32,100,101,102,32,95,95,100,101,108,105,116,101,109,95,95,40,115,101,108,102,44,32,107,101,121,41,58,10,32,32,32,32,32,32,32,32,100,101,108,32,115,101,108,102,46,95,97,91,107,101,121,93,10,10,32,32,32,32,100,101,102,32,95,95,114,101,112,114,95,95,40,115,101,108,102,41,32,45,62,32,115,116,114,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,102,34,100,101,102,97,117,108,116,100,105,99,116,40,123,115,101,108,102,46,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,125,44,32,123,115,101,108,102,46,95,97,125,41,34,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,101,113,95,95,40,115,101,108,102,44,32,95,95,111,58,32,111,98,106,101,99,116,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,110,111,116,32,105,115,105,110,115,116,97,110,99,101,40,95,95,111,44,32,100,101,102,97,117,108,116,100,105,99,116,41,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,70,97,108,115,101,10,32,32,32,32,32,32,32,32,105,102,32,115,101,108,102,46,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,32,33,61,32,95,95,111,46,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,70,97,108,115,101,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,95,97,32,61,61,32,95,95,111,46,95,97,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,105,116,101,114,95,95,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,105,116,101,114,40,115,101,108,102,46,95,97,41,10,10,32,32,32,32,100,101,102,32,95,95,99,111,110,116,97,105,110,115,95,95,40,115,101,108,102,44,32,107,101,121,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,107,101,121,32,105,110,32,115,101,108,102,46,95,97,10,32,32,32,32,10,32,32,32,32,100,101,102,32,95,95,108,101,110,95,95,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,108,101,110,40,115,101,108,102,46,95,97,41,10,10,32,32,32,32,100,101,102,32,107,101,121,115,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,95,97,46,107,101,121,115,40,41,10,32,32,32,32,10,32,32,32,32,100,101,102,32,118,97,108,117,101,115,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,95,97,46,118,97,108,117,101,115,40,41,10,32,32,32,32,10,32,32,32,32,100,101,102,32,105,116,101,109,115,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,95,97,46,105,116,101,109,115,40,41,10,10,32,32,32,32,100,101,102,32,112,111,112,40,115,101,108,102,44,32,42,97,114,103,115,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,95,97,46,112,111,112,40,42,97,114,103,115,41,10,10,32,32,32,32,100,101,102,32,99,108,101,97,114,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,115,101,108,102,46,95,97,46,99,108,101,97,114,40,41,10,10,32,32,32,32,100,101,102,32,99,111,112,121,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,110,101,119,95,100,100,32,61,32,100,101,102,97,117,108,116,100,105,99,116,40,115,101,108,102,46,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,41,10,32,32,32,32,32,32,32,32,110,101,119,95,100,100,46,95,97,32,61,32,115,101,108,102,46,95,97,46,99,111,112,121,40,41,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,110,101,119,95,100,100,10,32,32,32,32,10,32,32,32,32,100,101,102,32,103,101,116,40,115,101,108,102,44,32,107,101,121,44,32,100,101,102,97,117,108,116,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,95,97,46,103,101,116,40,107,101,121,44,32,100,101,102,97,117,108,116,41,10,32,32,32,32,10,32,32,32,32,100,101,102,32,117,112,100,97,116,101,40,115,101,108,102,44,32,111,116,104,101,114,41,58,10,32,32,32,32,32,32,32,32,115,101,108,102,46,95,97,46,117,112,100,97,116,101,40,111,116,104,101,114,41,10,0}; + inline const char kPythonLibs_collections[] = {100,101,102,32,67,111,117,110,116,101,114,40,105,116,101,114,97,98,108,101,41,58,10,32,32,32,32,97,32,61,32,123,125,10,32,32,32,32,102,111,114,32,120,32,105,110,32,105,116,101,114,97,98,108,101,58,10,32,32,32,32,32,32,32,32,105,102,32,120,32,105,110,32,97,58,10,32,32,32,32,32,32,32,32,32,32,32,32,97,91,120,93,32,43,61,32,49,10,32,32,32,32,32,32,32,32,101,108,115,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,97,91,120,93,32,61,32,49,10,32,32,32,32,114,101,116,117,114,110,32,97,10,10,99,108,97,115,115,32,100,101,102,97,117,108,116,100,105,99,116,40,100,105,99,116,41,58,10,32,32,32,32,100,101,102,32,95,95,105,110,105,116,95,95,40,115,101,108,102,44,32,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,44,32,42,97,114,103,115,41,58,10,32,32,32,32,32,32,32,32,115,117,112,101,114,40,41,46,95,95,105,110,105,116,95,95,40,42,97,114,103,115,41,10,32,32,32,32,32,32,32,32,115,101,108,102,46,95,101,110,97,98,108,101,95,105,110,115,116,97,110,99,101,95,100,105,99,116,40,41,10,32,32,32,32,32,32,32,32,115,101,108,102,46,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,32,61,32,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,10,10,32,32,32,32,100,101,102,32,95,95,109,105,115,115,105,110,103,95,95,40,115,101,108,102,44,32,107,101,121,41,58,10,32,32,32,32,32,32,32,32,115,101,108,102,91,107,101,121,93,32,61,32,115,101,108,102,46,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,40,41,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,91,107,101,121,93,10,10,32,32,32,32,100,101,102,32,95,95,114,101,112,114,95,95,40,115,101,108,102,41,32,45,62,32,115,116,114,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,102,34,100,101,102,97,117,108,116,100,105,99,116,40,123,115,101,108,102,46,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,125,44,32,123,115,117,112,101,114,40,41,46,95,95,114,101,112,114,95,95,40,41,125,41,34,10,10,32,32,32,32,100,101,102,32,99,111,112,121,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,100,101,102,97,117,108,116,100,105,99,116,40,115,101,108,102,46,100,101,102,97,117,108,116,95,102,97,99,116,111,114,121,44,32,115,101,108,102,41,10,10,0}; inline const char kPythonLibs_colorsys[] = {34,34,34,67,111,110,118,101,114,115,105,111,110,32,102,117,110,99,116,105,111,110,115,32,98,101,116,119,101,101,110,32,82,71,66,32,97,110,100,32,111,116,104,101,114,32,99,111,108,111,114,32,115,121,115,116,101,109,115,46,10,10,84,104,105,115,32,109,111,100,117,108,101,115,32,112,114,111,118,105,100,101,115,32,116,119,111,32,102,117,110,99,116,105,111,110,115,32,102,111,114,32,101,97,99,104,32,99,111,108,111,114,32,115,121,115,116,101,109,32,65,66,67,58,10,10,32,32,114,103,98,95,116,111,95,97,98,99,40,114,44,32,103,44,32,98,41,32,45,45,62,32,97,44,32,98,44,32,99,10,32,32,97,98,99,95,116,111,95,114,103,98,40,97,44,32,98,44,32,99,41,32,45,45,62,32,114,44,32,103,44,32,98,10,10,65,108,108,32,105,110,112,117,116,115,32,97,110,100,32,111,117,116,112,117,116,115,32,97,114,101,32,116,114,105,112,108,101,115,32,111,102,32,102,108,111,97,116,115,32,105,110,32,116,104,101,32,114,97,110,103,101,32,91,48,46,48,46,46,46,49,46,48,93,10,40,119,105,116,104,32,116,104,101,32,101,120,99,101,112,116,105,111,110,32,111,102,32,73,32,97,110,100,32,81,44,32,119,104,105,99,104,32,99,111,118,101,114,115,32,97,32,115,108,105,103,104,116,108,121,32,108,97,114,103,101,114,32,114,97,110,103,101,41,46,10,73,110,112,117,116,115,32,111,117,116,115,105,100,101,32,116,104,101,32,118,97,108,105,100,32,114,97,110,103,101,32,109,97,121,32,99,97,117,115,101,32,101,120,99,101,112,116,105,111,110,115,32,111,114,32,105,110,118,97,108,105,100,32,111,117,116,112,117,116,115,46,10,10,83,117,112,112,111,114,116,101,100,32,99,111,108,111,114,32,115,121,115,116,101,109,115,58,10,82,71,66,58,32,82,101,100,44,32,71,114,101,101,110,44,32,66,108,117,101,32,99,111,109,112,111,110,101,110,116,115,10,89,73,81,58,32,76,117,109,105,110,97,110,99,101,44,32,67,104,114,111,109,105,110,97,110,99,101,32,40,117,115,101,100,32,98,121,32,99,111,109,112,111,115,105,116,101,32,118,105,100,101,111,32,115,105,103,110,97,108,115,41,10,72,76,83,58,32,72,117,101,44,32,76,117,109,105,110,97,110,99,101,44,32,83,97,116,117,114,97,116,105,111,110,10,72,83,86,58,32,72,117,101,44,32,83,97,116,117,114,97,116,105,111,110,44,32,86,97,108,117,101,10,34,34,34,10,10,35,32,82,101,102,101,114,101,110,99,101,115,58,10,35,32,104,116,116,112,58,47,47,101,110,46,119,105,107,105,112,101,100,105,97,46,111,114,103,47,119,105,107,105,47,89,73,81,10,35,32,104,116,116,112,58,47,47,101,110,46,119,105,107,105,112,101,100,105,97,46,111,114,103,47,119,105,107,105,47,72,76,83,95,99,111,108,111,114,95,115,112,97,99,101,10,35,32,104,116,116,112,58,47,47,101,110,46,119,105,107,105,112,101,100,105,97,46,111,114,103,47,119,105,107,105,47,72,83,86,95,99,111,108,111,114,95,115,112,97,99,101,10,10,95,95,97,108,108,95,95,32,61,32,91,34,114,103,98,95,116,111,95,121,105,113,34,44,34,121,105,113,95,116,111,95,114,103,98,34,44,34,114,103,98,95,116,111,95,104,108,115,34,44,34,104,108,115,95,116,111,95,114,103,98,34,44,10,32,32,32,32,32,32,32,32,32,32,32,34,114,103,98,95,116,111,95,104,115,118,34,44,34,104,115,118,95,116,111,95,114,103,98,34,93,10,10,35,32,83,111,109,101,32,102,108,111,97,116,105,110,103,32,112,111,105,110,116,32,99,111,110,115,116,97,110,116,115,10,10,79,78,69,95,84,72,73,82,68,32,61,32,49,46,48,47,51,46,48,10,79,78,69,95,83,73,88,84,72,32,61,32,49,46,48,47,54,46,48,10,84,87,79,95,84,72,73,82,68,32,61,32,50,46,48,47,51,46,48,10,10,35,32,89,73,81,58,32,117,115,101,100,32,98,121,32,99,111,109,112,111,115,105,116,101,32,118,105,100,101,111,32,115,105,103,110,97,108,115,32,40,108,105,110,101,97,114,32,99,111,109,98,105,110,97,116,105,111,110,115,32,111,102,32,82,71,66,41,10,35,32,89,58,32,112,101,114,99,101,105,118,101,100,32,103,114,101,121,32,108,101,118,101,108,32,40,48,46,48,32,61,61,32,98,108,97,99,107,44,32,49,46,48,32,61,61,32,119,104,105,116,101,41,10,35,32,73,44,32,81,58,32,99,111,108,111,114,32,99,111,109,112,111,110,101,110,116,115,10,35,10,35,32,84,104,101,114,101,32,97,114,101,32,97,32,103,114,101,97,116,32,109,97,110,121,32,118,101,114,115,105,111,110,115,32,111,102,32,116,104,101,32,99,111,110,115,116,97,110,116,115,32,117,115,101,100,32,105,110,32,116,104,101,115,101,32,102,111,114,109,117,108,97,101,46,10,35,32,84,104,101,32,111,110,101,115,32,105,110,32,116,104,105,115,32,108,105,98,114,97,114,121,32,117,115,101,115,32,99,111,110,115,116,97,110,116,115,32,102,114,111,109,32,116,104,101,32,70,67,67,32,118,101,114,115,105,111,110,32,111,102,32,78,84,83,67,46,10,10,100,101,102,32,114,103,98,95,116,111,95,121,105,113,40,114,44,32,103,44,32,98,41,58,10,32,32,32,32,121,32,61,32,48,46,51,48,42,114,32,43,32,48,46,53,57,42,103,32,43,32,48,46,49,49,42,98,10,32,32,32,32,105,32,61,32,48,46,55,52,42,40,114,45,121,41,32,45,32,48,46,50,55,42,40,98,45,121,41,10,32,32,32,32,113,32,61,32,48,46,52,56,42,40,114,45,121,41,32,43,32,48,46,52,49,42,40,98,45,121,41,10,32,32,32,32,114,101,116,117,114,110,32,40,121,44,32,105,44,32,113,41,10,10,100,101,102,32,121,105,113,95,116,111,95,114,103,98,40,121,44,32,105,44,32,113,41,58,10,32,32,32,32,35,32,114,32,61,32,121,32,43,32,40,48,46,50,55,42,113,32,43,32,48,46,52,49,42,105,41,32,47,32,40,48,46,55,52,42,48,46,52,49,32,43,32,48,46,50,55,42,48,46,52,56,41,10,32,32,32,32,35,32,98,32,61,32,121,32,43,32,40,48,46,55,52,42,113,32,45,32,48,46,52,56,42,105,41,32,47,32,40,48,46,55,52,42,48,46,52,49,32,43,32,48,46,50,55,42,48,46,52,56,41,10,32,32,32,32,35,32,103,32,61,32,121,32,45,32,40,48,46,51,48,42,40,114,45,121,41,32,43,32,48,46,49,49,42,40,98,45,121,41,41,32,47,32,48,46,53,57,10,10,32,32,32,32,114,32,61,32,121,32,43,32,48,46,57,52,54,56,56,50,50,49,55,48,57,48,48,54,57,51,42,105,32,43,32,48,46,54,50,51,53,53,54,53,56,49,57,56,54,49,52,51,51,42,113,10,32,32,32,32,103,32,61,32,121,32,45,32,48,46,50,55,52,55,56,55,54,52,54,50,57,56,57,55,56,51,52,42,105,32,45,32,48,46,54,51,53,54,57,49,48,55,57,49,56,55,51,56,48,49,42,113,10,32,32,32,32,98,32,61,32,121,32,45,32,49,46,49,48,56,53,52,53,48,51,52,54,52,50,48,51,50,50,42,105,32,43,32,49,46,55,48,57,48,48,54,57,50,56,52,48,54,52,54,54,54,42,113,10,10,32,32,32,32,105,102,32,114,32,60,32,48,46,48,58,10,32,32,32,32,32,32,32,32,114,32,61,32,48,46,48,10,32,32,32,32,105,102,32,103,32,60,32,48,46,48,58,10,32,32,32,32,32,32,32,32,103,32,61,32,48,46,48,10,32,32,32,32,105,102,32,98,32,60,32,48,46,48,58,10,32,32,32,32,32,32,32,32,98,32,61,32,48,46,48,10,32,32,32,32,105,102,32,114,32,62,32,49,46,48,58,10,32,32,32,32,32,32,32,32,114,32,61,32,49,46,48,10,32,32,32,32,105,102,32,103,32,62,32,49,46,48,58,10,32,32,32,32,32,32,32,32,103,32,61,32,49,46,48,10,32,32,32,32,105,102,32,98,32,62,32,49,46,48,58,10,32,32,32,32,32,32,32,32,98,32,61,32,49,46,48,10,32,32,32,32,114,101,116,117,114,110,32,40,114,44,32,103,44,32,98,41,10,10,10,35,32,72,76,83,58,32,72,117,101,44,32,76,117,109,105,110,97,110,99,101,44,32,83,97,116,117,114,97,116,105,111,110,10,35,32,72,58,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,112,101,99,116,114,117,109,10,35,32,76,58,32,99,111,108,111,114,32,108,105,103,104,116,110,101,115,115,10,35,32,83,58,32,99,111,108,111,114,32,115,97,116,117,114,97,116,105,111,110,10,10,100,101,102,32,114,103,98,95,116,111,95,104,108,115,40,114,44,32,103,44,32,98,41,58,10,32,32,32,32,109,97,120,99,32,61,32,109,97,120,40,114,44,32,103,44,32,98,41,10,32,32,32,32,109,105,110,99,32,61,32,109,105,110,40,114,44,32,103,44,32,98,41,10,32,32,32,32,115,117,109,99,32,61,32,40,109,97,120,99,43,109,105,110,99,41,10,32,32,32,32,114,97,110,103,101,99,32,61,32,40,109,97,120,99,45,109,105,110,99,41,10,32,32,32,32,108,32,61,32,115,117,109,99,47,50,46,48,10,32,32,32,32,105,102,32,109,105,110,99,32,61,61,32,109,97,120,99,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,48,46,48,44,32,108,44,32,48,46,48,10,32,32,32,32,105,102,32,108,32,60,61,32,48,46,53,58,10,32,32,32,32,32,32,32,32,115,32,61,32,114,97,110,103,101,99,32,47,32,115,117,109,99,10,32,32,32,32,101,108,115,101,58,10,32,32,32,32,32,32,32,32,115,32,61,32,114,97,110,103,101,99,32,47,32,40,50,46,48,45,109,97,120,99,45,109,105,110,99,41,32,32,35,32,78,111,116,32,97,108,119,97,121,115,32,50,46,48,45,115,117,109,99,58,32,103,104,45,49,48,54,52,57,56,46,10,32,32,32,32,114,99,32,61,32,40,109,97,120,99,45,114,41,32,47,32,114,97,110,103,101,99,10,32,32,32,32,103,99,32,61,32,40,109,97,120,99,45,103,41,32,47,32,114,97,110,103,101,99,10,32,32,32,32,98,99,32,61,32,40,109,97,120,99,45,98,41,32,47,32,114,97,110,103,101,99,10,32,32,32,32,105,102,32,114,32,61,61,32,109,97,120,99,58,10,32,32,32,32,32,32,32,32,104,32,61,32,98,99,45,103,99,10,32,32,32,32,101,108,105,102,32,103,32,61,61,32,109,97,120,99,58,10,32,32,32,32,32,32,32,32,104,32,61,32,50,46,48,43,114,99,45,98,99,10,32,32,32,32,101,108,115,101,58,10,32,32,32,32,32,32,32,32,104,32,61,32,52,46,48,43,103,99,45,114,99,10,32,32,32,32,35,32,104,32,61,32,40,104,47,54,46,48,41,32,37,32,49,46,48,10,32,32,32,32,104,32,61,32,104,32,47,32,54,46,48,10,32,32,32,32,104,32,61,32,104,32,45,32,105,110,116,40,104,41,10,32,32,32,32,114,101,116,117,114,110,32,104,44,32,108,44,32,115,10,10,100,101,102,32,104,108,115,95,116,111,95,114,103,98,40,104,44,32,108,44,32,115,41,58,10,32,32,32,32,105,102,32,115,32,61,61,32,48,46,48,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,108,44,32,108,44,32,108,10,32,32,32,32,105,102,32,108,32,60,61,32,48,46,53,58,10,32,32,32,32,32,32,32,32,109,50,32,61,32,108,32,42,32,40,49,46,48,43,115,41,10,32,32,32,32,101,108,115,101,58,10,32,32,32,32,32,32,32,32,109,50,32,61,32,108,43,115,45,40,108,42,115,41,10,32,32,32,32,109,49,32,61,32,50,46,48,42,108,32,45,32,109,50,10,32,32,32,32,114,101,116,117,114,110,32,40,95,118,40,109,49,44,32,109,50,44,32,104,43,79,78,69,95,84,72,73,82,68,41,44,32,95,118,40,109,49,44,32,109,50,44,32,104,41,44,32,95,118,40,109,49,44,32,109,50,44,32,104,45,79,78,69,95,84,72,73,82,68,41,41,10,10,100,101,102,32,95,118,40,109,49,44,32,109,50,44,32,104,117,101,41,58,10,32,32,32,32,35,32,104,117,101,32,61,32,104,117,101,32,37,32,49,46,48,10,32,32,32,32,104,117,101,32,61,32,104,117,101,32,45,32,105,110,116,40,104,117,101,41,10,32,32,32,32,105,102,32,104,117,101,32,60,32,79,78,69,95,83,73,88,84,72,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,109,49,32,43,32,40,109,50,45,109,49,41,42,104,117,101,42,54,46,48,10,32,32,32,32,105,102,32,104,117,101,32,60,32,48,46,53,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,109,50,10,32,32,32,32,105,102,32,104,117,101,32,60,32,84,87,79,95,84,72,73,82,68,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,109,49,32,43,32,40,109,50,45,109,49,41,42,40,84,87,79,95,84,72,73,82,68,45,104,117,101,41,42,54,46,48,10,32,32,32,32,114,101,116,117,114,110,32,109,49,10,10,10,35,32,72,83,86,58,32,72,117,101,44,32,83,97,116,117,114,97,116,105,111,110,44,32,86,97,108,117,101,10,35,32,72,58,32,112,111,115,105,116,105,111,110,32,105,110,32,116,104,101,32,115,112,101,99,116,114,117,109,10,35,32,83,58,32,99,111,108,111,114,32,115,97,116,117,114,97,116,105,111,110,32,40,34,112,117,114,105,116,121,34,41,10,35,32,86,58,32,99,111,108,111,114,32,98,114,105,103,104,116,110,101,115,115,10,10,100,101,102,32,114,103,98,95,116,111,95,104,115,118,40,114,44,32,103,44,32,98,41,58,10,32,32,32,32,109,97,120,99,32,61,32,109,97,120,40,114,44,32,103,44,32,98,41,10,32,32,32,32,109,105,110,99,32,61,32,109,105,110,40,114,44,32,103,44,32,98,41,10,32,32,32,32,114,97,110,103,101,99,32,61,32,40,109,97,120,99,45,109,105,110,99,41,10,32,32,32,32,118,32,61,32,109,97,120,99,10,32,32,32,32,105,102,32,109,105,110,99,32,61,61,32,109,97,120,99,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,48,46,48,44,32,48,46,48,44,32,118,10,32,32,32,32,115,32,61,32,114,97,110,103,101,99,32,47,32,109,97,120,99,10,32,32,32,32,114,99,32,61,32,40,109,97,120,99,45,114,41,32,47,32,114,97,110,103,101,99,10,32,32,32,32,103,99,32,61,32,40,109,97,120,99,45,103,41,32,47,32,114,97,110,103,101,99,10,32,32,32,32,98,99,32,61,32,40,109,97,120,99,45,98,41,32,47,32,114,97,110,103,101,99,10,32,32,32,32,105,102,32,114,32,61,61,32,109,97,120,99,58,10,32,32,32,32,32,32,32,32,104,32,61,32,98,99,45,103,99,10,32,32,32,32,101,108,105,102,32,103,32,61,61,32,109,97,120,99,58,10,32,32,32,32,32,32,32,32,104,32,61,32,50,46,48,43,114,99,45,98,99,10,32,32,32,32,101,108,115,101,58,10,32,32,32,32,32,32,32,32,104,32,61,32,52,46,48,43,103,99,45,114,99,10,32,32,32,32,35,32,104,32,61,32,40,104,47,54,46,48,41,32,37,32,49,46,48,10,32,32,32,32,104,32,61,32,104,32,47,32,54,46,48,10,32,32,32,32,104,32,61,32,104,32,45,32,105,110,116,40,104,41,10,32,32,32,32,114,101,116,117,114,110,32,104,44,32,115,44,32,118,10,10,100,101,102,32,104,115,118,95,116,111,95,114,103,98,40,104,44,32,115,44,32,118,41,58,10,32,32,32,32,105,102,32,115,32,61,61,32,48,46,48,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,118,44,32,118,44,32,118,10,32,32,32,32,105,32,61,32,105,110,116,40,104,42,54,46,48,41,32,35,32,88,88,88,32,97,115,115,117,109,101,32,105,110,116,40,41,32,116,114,117,110,99,97,116,101,115,33,10,32,32,32,32,102,32,61,32,40,104,42,54,46,48,41,32,45,32,105,10,32,32,32,32,112,32,61,32,118,42,40,49,46,48,32,45,32,115,41,10,32,32,32,32,113,32,61,32,118,42,40,49,46,48,32,45,32,115,42,102,41,10,32,32,32,32,116,32,61,32,118,42,40,49,46,48,32,45,32,115,42,40,49,46,48,45,102,41,41,10,32,32,32,32,105,32,61,32,105,37,54,10,32,32,32,32,105,102,32,105,32,61,61,32,48,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,118,44,32,116,44,32,112,10,32,32,32,32,105,102,32,105,32,61,61,32,49,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,113,44,32,118,44,32,112,10,32,32,32,32,105,102,32,105,32,61,61,32,50,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,112,44,32,118,44,32,116,10,32,32,32,32,105,102,32,105,32,61,61,32,51,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,112,44,32,113,44,32,118,10,32,32,32,32,105,102,32,105,32,61,61,32,52,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,116,44,32,112,44,32,118,10,32,32,32,32,105,102,32,105,32,61,61,32,53,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,118,44,32,112,44,32,113,10,32,32,32,32,35,32,67,97,110,110,111,116,32,103,101,116,32,104,101,114,101,0}; inline const char kPythonLibs_datetime[] = {102,114,111,109,32,116,105,109,101,32,105,109,112,111,114,116,32,108,111,99,97,108,116,105,109,101,10,10,99,108,97,115,115,32,116,105,109,101,100,101,108,116,97,58,10,32,32,32,32,100,101,102,32,95,95,105,110,105,116,95,95,40,115,101,108,102,44,32,100,97,121,115,61,48,44,32,115,101,99,111,110,100,115,61,48,41,58,10,32,32,32,32,32,32,32,32,115,101,108,102,46,100,97,121,115,32,61,32,100,97,121,115,10,32,32,32,32,32,32,32,32,115,101,108,102,46,115,101,99,111,110,100,115,32,61,32,115,101,99,111,110,100,115,10,10,32,32,32,32,100,101,102,32,95,95,114,101,112,114,95,95,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,102,34,100,97,116,101,116,105,109,101,46,116,105,109,101,100,101,108,116,97,40,100,97,121,115,61,123,115,101,108,102,46,100,97,121,115,125,44,32,115,101,99,111,110,100,115,61,123,115,101,108,102,46,115,101,99,111,110,100,115,125,41,34,10,10,32,32,32,32,100,101,102,32,95,95,101,113,95,95,40,115,101,108,102,44,32,111,116,104,101,114,58,32,39,116,105,109,101,100,101,108,116,97,39,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,116,105,109,101,100,101,108,116,97,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,100,97,121,115,44,32,115,101,108,102,46,115,101,99,111,110,100,115,41,32,61,61,32,40,111,116,104,101,114,46,100,97,121,115,44,32,111,116,104,101,114,46,115,101,99,111,110,100,115,41,10,10,32,32,32,32,100,101,102,32,95,95,108,116,95,95,40,115,101,108,102,44,32,111,116,104,101,114,58,32,39,116,105,109,101,100,101,108,116,97,39,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,116,105,109,101,100,101,108,116,97,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,100,97,121,115,44,32,115,101,108,102,46,115,101,99,111,110,100,115,41,32,60,32,40,111,116,104,101,114,46,100,97,121,115,44,32,111,116,104,101,114,46,115,101,99,111,110,100,115,41,10,10,32,32,32,32,100,101,102,32,95,95,108,101,95,95,40,115,101,108,102,44,32,111,116,104,101,114,58,32,39,116,105,109,101,100,101,108,116,97,39,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,116,105,109,101,100,101,108,116,97,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,100,97,121,115,44,32,115,101,108,102,46,115,101,99,111,110,100,115,41,32,60,61,32,40,111,116,104,101,114,46,100,97,121,115,44,32,111,116,104,101,114,46,115,101,99,111,110,100,115,41,10,10,32,32,32,32,100,101,102,32,95,95,103,116,95,95,40,115,101,108,102,44,32,111,116,104,101,114,58,32,39,116,105,109,101,100,101,108,116,97,39,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,116,105,109,101,100,101,108,116,97,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,100,97,121,115,44,32,115,101,108,102,46,115,101,99,111,110,100,115,41,32,62,32,40,111,116,104,101,114,46,100,97,121,115,44,32,111,116,104,101,114,46,115,101,99,111,110,100,115,41,10,10,32,32,32,32,100,101,102,32,95,95,103,101,95,95,40,115,101,108,102,44,32,111,116,104,101,114,58,32,39,116,105,109,101,100,101,108,116,97,39,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,116,105,109,101,100,101,108,116,97,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,100,97,121,115,44,32,115,101,108,102,46,115,101,99,111,110,100,115,41,32,62,61,32,40,111,116,104,101,114,46,100,97,121,115,44,32,111,116,104,101,114,46,115,101,99,111,110,100,115,41,10,10,10,99,108,97,115,115,32,100,97,116,101,58,10,32,32,32,32,100,101,102,32,95,95,105,110,105,116,95,95,40,115,101,108,102,44,32,121,101,97,114,58,32,105,110,116,44,32,109,111,110,116,104,58,32,105,110,116,44,32,100,97,121,58,32,105,110,116,41,58,10,32,32,32,32,32,32,32,32,115,101,108,102,46,121,101,97,114,32,61,32,121,101,97,114,10,32,32,32,32,32,32,32,32,115,101,108,102,46,109,111,110,116,104,32,61,32,109,111,110,116,104,10,32,32,32,32,32,32,32,32,115,101,108,102,46,100,97,121,32,61,32,100,97,121,10,10,32,32,32,32,64,115,116,97,116,105,99,109,101,116,104,111,100,10,32,32,32,32,100,101,102,32,116,111,100,97,121,40,41,58,10,32,32,32,32,32,32,32,32,116,32,61,32,108,111,99,97,108,116,105,109,101,40,41,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,100,97,116,101,40,116,46,116,109,95,121,101,97,114,44,32,116,46,116,109,95,109,111,110,44,32,116,46,116,109,95,109,100,97,121,41,10,10,32,32,32,32,100,101,102,32,95,95,101,113,95,95,40,115,101,108,102,44,32,111,116,104,101,114,58,32,39,100,97,116,101,39,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,100,97,116,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,121,101,97,114,44,32,115,101,108,102,46,109,111,110,116,104,44,32,115,101,108,102,46,100,97,121,41,32,61,61,32,40,111,116,104,101,114,46,121,101,97,114,44,32,111,116,104,101,114,46,109,111,110,116,104,44,32,111,116,104,101,114,46,100,97,121,41,10,10,32,32,32,32,100,101,102,32,95,95,108,116,95,95,40,115,101,108,102,44,32,111,116,104,101,114,58,32,39,100,97,116,101,39,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,100,97,116,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,121,101,97,114,44,32,115,101,108,102,46,109,111,110,116,104,44,32,115,101,108,102,46,100,97,121,41,32,60,32,40,111,116,104,101,114,46,121,101,97,114,44,32,111,116,104,101,114,46,109,111,110,116,104,44,32,111,116,104,101,114,46,100,97,121,41,10,10,32,32,32,32,100,101,102,32,95,95,108,101,95,95,40,115,101,108,102,44,32,111,116,104,101,114,58,32,39,100,97,116,101,39,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,100,97,116,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,121,101,97,114,44,32,115,101,108,102,46,109,111,110,116,104,44,32,115,101,108,102,46,100,97,121,41,32,60,61,32,40,111,116,104,101,114,46,121,101,97,114,44,32,111,116,104,101,114,46,109,111,110,116,104,44,32,111,116,104,101,114,46,100,97,121,41,10,10,32,32,32,32,100,101,102,32,95,95,103,116,95,95,40,115,101,108,102,44,32,111,116,104,101,114,58,32,39,100,97,116,101,39,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,100,97,116,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,121,101,97,114,44,32,115,101,108,102,46,109,111,110,116,104,44,32,115,101,108,102,46,100,97,121,41,32,62,32,40,111,116,104,101,114,46,121,101,97,114,44,32,111,116,104,101,114,46,109,111,110,116,104,44,32,111,116,104,101,114,46,100,97,121,41,10,10,32,32,32,32,100,101,102,32,95,95,103,101,95,95,40,115,101,108,102,44,32,111,116,104,101,114,58,32,39,100,97,116,101,39,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,100,97,116,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,121,101,97,114,44,32,115,101,108,102,46,109,111,110,116,104,44,32,115,101,108,102,46,100,97,121,41,32,62,61,32,40,111,116,104,101,114,46,121,101,97,114,44,32,111,116,104,101,114,46,109,111,110,116,104,44,32,111,116,104,101,114,46,100,97,121,41,10,10,32,32,32,32,100,101,102,32,95,95,115,116,114,95,95,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,102,34,123,115,101,108,102,46,121,101,97,114,125,45,123,115,101,108,102,46,109,111,110,116,104,58,48,50,125,45,123,115,101,108,102,46,100,97,121,58,48,50,125,34,10,10,32,32,32,32,100,101,102,32,95,95,114,101,112,114,95,95,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,102,34,100,97,116,101,116,105,109,101,46,100,97,116,101,40,123,115,101,108,102,46,121,101,97,114,125,44,32,123,115,101,108,102,46,109,111,110,116,104,125,44,32,123,115,101,108,102,46,100,97,121,125,41,34,10,10,10,99,108,97,115,115,32,100,97,116,101,116,105,109,101,40,100,97,116,101,41,58,10,32,32,32,32,100,101,102,32,95,95,105,110,105,116,95,95,40,115,101,108,102,44,32,121,101,97,114,58,32,105,110,116,44,32,109,111,110,116,104,58,32,105,110,116,44,32,100,97,121,58,32,105,110,116,44,32,104,111,117,114,58,32,105,110,116,44,32,109,105,110,117,116,101,58,32,105,110,116,44,32,115,101,99,111,110,100,58,32,105,110,116,41,58,10,32,32,32,32,32,32,32,32,115,117,112,101,114,40,41,46,95,95,105,110,105,116,95,95,40,121,101,97,114,44,32,109,111,110,116,104,44,32,100,97,121,41,10,32,32,32,32,32,32,32,32,35,32,86,97,108,105,100,97,116,101,32,97,110,100,32,115,101,116,32,104,111,117,114,44,32,109,105,110,117,116,101,44,32,97,110,100,32,115,101,99,111,110,100,10,32,32,32,32,32,32,32,32,105,102,32,110,111,116,32,48,32,60,61,32,104,111,117,114,32,60,61,32,50,51,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,97,105,115,101,32,86,97,108,117,101,69,114,114,111,114,40,34,72,111,117,114,32,109,117,115,116,32,98,101,32,98,101,116,119,101,101,110,32,48,32,97,110,100,32,50,51,34,41,10,32,32,32,32,32,32,32,32,115,101,108,102,46,104,111,117,114,32,61,32,104,111,117,114,10,32,32,32,32,32,32,32,32,105,102,32,110,111,116,32,48,32,60,61,32,109,105,110,117,116,101,32,60,61,32,53,57,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,97,105,115,101,32,86,97,108,117,101,69,114,114,111,114,40,34,77,105,110,117,116,101,32,109,117,115,116,32,98,101,32,98,101,116,119,101,101,110,32,48,32,97,110,100,32,53,57,34,41,10,32,32,32,32,32,32,32,32,115,101,108,102,46,109,105,110,117,116,101,32,61,32,109,105,110,117,116,101,10,32,32,32,32,32,32,32,32,105,102,32,110,111,116,32,48,32,60,61,32,115,101,99,111,110,100,32,60,61,32,53,57,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,97,105,115,101,32,86,97,108,117,101,69,114,114,111,114,40,34,83,101,99,111,110,100,32,109,117,115,116,32,98,101,32,98,101,116,119,101,101,110,32,48,32,97,110,100,32,53,57,34,41,10,32,32,32,32,32,32,32,32,115,101,108,102,46,115,101,99,111,110,100,32,61,32,115,101,99,111,110,100,10,10,32,32,32,32,100,101,102,32,100,97,116,101,40,115,101,108,102,41,32,45,62,32,100,97,116,101,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,100,97,116,101,40,115,101,108,102,46,121,101,97,114,44,32,115,101,108,102,46,109,111,110,116,104,44,32,115,101,108,102,46,100,97,121,41,10,10,32,32,32,32,64,115,116,97,116,105,99,109,101,116,104,111,100,10,32,32,32,32,100,101,102,32,110,111,119,40,41,58,10,32,32,32,32,32,32,32,32,116,32,61,32,108,111,99,97,108,116,105,109,101,40,41,10,32,32,32,32,32,32,32,32,116,109,95,115,101,99,32,61,32,116,46,116,109,95,115,101,99,10,32,32,32,32,32,32,32,32,105,102,32,116,109,95,115,101,99,32,61,61,32,54,48,58,10,32,32,32,32,32,32,32,32,32,32,32,32,116,109,95,115,101,99,32,61,32,53,57,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,100,97,116,101,116,105,109,101,40,116,46,116,109,95,121,101,97,114,44,32,116,46,116,109,95,109,111,110,44,32,116,46,116,109,95,109,100,97,121,44,32,116,46,116,109,95,104,111,117,114,44,32,116,46,116,109,95,109,105,110,44,32,116,109,95,115,101,99,41,10,10,32,32,32,32,100,101,102,32,95,95,115,116,114,95,95,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,102,34,123,115,101,108,102,46,121,101,97,114,125,45,123,115,101,108,102,46,109,111,110,116,104,58,48,50,125,45,123,115,101,108,102,46,100,97,121,58,48,50,125,32,123,115,101,108,102,46,104,111,117,114,58,48,50,125,58,123,115,101,108,102,46,109,105,110,117,116,101,58,48,50,125,58,123,115,101,108,102,46,115,101,99,111,110,100,58,48,50,125,34,10,10,32,32,32,32,100,101,102,32,95,95,114,101,112,114,95,95,40,115,101,108,102,41,58,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,102,34,100,97,116,101,116,105,109,101,46,100,97,116,101,116,105,109,101,40,123,115,101,108,102,46,121,101,97,114,125,44,32,123,115,101,108,102,46,109,111,110,116,104,125,44,32,123,115,101,108,102,46,100,97,121,125,44,32,123,115,101,108,102,46,104,111,117,114,125,44,32,123,115,101,108,102,46,109,105,110,117,116,101,125,44,32,123,115,101,108,102,46,115,101,99,111,110,100,125,41,34,10,10,32,32,32,32,100,101,102,32,95,95,101,113,95,95,40,115,101,108,102,44,32,111,116,104,101,114,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,100,97,116,101,116,105,109,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,121,101,97,114,44,32,115,101,108,102,46,109,111,110,116,104,44,32,115,101,108,102,46,100,97,121,44,32,115,101,108,102,46,104,111,117,114,44,32,115,101,108,102,46,109,105,110,117,116,101,44,32,115,101,108,102,46,115,101,99,111,110,100,41,32,61,61,92,10,32,32,32,32,32,32,32,32,32,32,32,32,40,111,116,104,101,114,46,121,101,97,114,44,32,111,116,104,101,114,46,109,111,110,116,104,44,32,111,116,104,101,114,46,100,97,121,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,111,116,104,101,114,46,104,111,117,114,44,32,111,116,104,101,114,46,109,105,110,117,116,101,44,32,111,116,104,101,114,46,115,101,99,111,110,100,41,10,10,32,32,32,32,100,101,102,32,95,95,108,116,95,95,40,115,101,108,102,44,32,111,116,104,101,114,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,100,97,116,101,116,105,109,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,121,101,97,114,44,32,115,101,108,102,46,109,111,110,116,104,44,32,115,101,108,102,46,100,97,121,44,32,115,101,108,102,46,104,111,117,114,44,32,115,101,108,102,46,109,105,110,117,116,101,44,32,115,101,108,102,46,115,101,99,111,110,100,41,32,60,92,10,32,32,32,32,32,32,32,32,32,32,32,32,40,111,116,104,101,114,46,121,101,97,114,44,32,111,116,104,101,114,46,109,111,110,116,104,44,32,111,116,104,101,114,46,100,97,121,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,111,116,104,101,114,46,104,111,117,114,44,32,111,116,104,101,114,46,109,105,110,117,116,101,44,32,111,116,104,101,114,46,115,101,99,111,110,100,41,10,10,32,32,32,32,100,101,102,32,95,95,108,101,95,95,40,115,101,108,102,44,32,111,116,104,101,114,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,100,97,116,101,116,105,109,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,121,101,97,114,44,32,115,101,108,102,46,109,111,110,116,104,44,32,115,101,108,102,46,100,97,121,44,32,115,101,108,102,46,104,111,117,114,44,32,115,101,108,102,46,109,105,110,117,116,101,44,32,115,101,108,102,46,115,101,99,111,110,100,41,32,60,61,92,10,32,32,32,32,32,32,32,32,32,32,32,32,40,111,116,104,101,114,46,121,101,97,114,44,32,111,116,104,101,114,46,109,111,110,116,104,44,32,111,116,104,101,114,46,100,97,121,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,111,116,104,101,114,46,104,111,117,114,44,32,111,116,104,101,114,46,109,105,110,117,116,101,44,32,111,116,104,101,114,46,115,101,99,111,110,100,41,10,10,32,32,32,32,100,101,102,32,95,95,103,116,95,95,40,115,101,108,102,44,32,111,116,104,101,114,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,100,97,116,101,116,105,109,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,121,101,97,114,44,32,115,101,108,102,46,109,111,110,116,104,44,32,115,101,108,102,46,100,97,121,44,32,115,101,108,102,46,104,111,117,114,44,32,115,101,108,102,46,109,105,110,117,116,101,44,32,115,101,108,102,46,115,101,99,111,110,100,41,32,62,92,10,32,32,32,32,32,32,32,32,32,32,32,32,40,111,116,104,101,114,46,121,101,97,114,44,32,111,116,104,101,114,46,109,111,110,116,104,44,32,111,116,104,101,114,46,100,97,121,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,111,116,104,101,114,46,104,111,117,114,44,32,111,116,104,101,114,46,109,105,110,117,116,101,44,32,111,116,104,101,114,46,115,101,99,111,110,100,41,10,10,32,32,32,32,100,101,102,32,95,95,103,101,95,95,40,115,101,108,102,44,32,111,116,104,101,114,41,32,45,62,32,98,111,111,108,58,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112,101,40,111,116,104,101,114,41,32,105,115,32,110,111,116,32,100,97,116,101,116,105,109,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,40,115,101,108,102,46,121,101,97,114,44,32,115,101,108,102,46,109,111,110,116,104,44,32,115,101,108,102,46,100,97,121,44,32,115,101,108,102,46,104,111,117,114,44,32,115,101,108,102,46,109,105,110,117,116,101,44,32,115,101,108,102,46,115,101,99,111,110,100,41,32,62,61,92,10,32,32,32,32,32,32,32,32,32,32,32,32,40,111,116,104,101,114,46,121,101,97,114,44,32,111,116,104,101,114,46,109,111,110,116,104,44,32,111,116,104,101,114,46,100,97,121,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,111,116,104,101,114,46,104,111,117,114,44,32,111,116,104,101,114,46,109,105,110,117,116,101,44,32,111,116,104,101,114,46,115,101,99,111,110,100,41,10,10,32,32,32,32,100,101,102,32,116,105,109,101,115,116,97,109,112,40,115,101,108,102,41,32,45,62,32,102,108,111,97,116,58,10,32,32,32,32,32,32,32,32,114,97,105,115,101,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114,10,10,0}; inline const char kPythonLibs_functools[] = {35,32,100,101,102,32,99,97,99,104,101,40,102,41,58,10,35,32,32,32,32,32,100,101,102,32,119,114,97,112,112,101,114,40,42,97,114,103,115,41,58,10,35,32,32,32,32,32,32,32,32,32,105,102,32,110,111,116,32,104,97,115,97,116,116,114,40,102,44,32,39,95,95,99,97,99,104,101,95,95,39,41,58,10,35,32,32,32,32,32,32,32,32,32,32,32,32,32,102,46,95,95,99,97,99,104,101,95,95,32,61,32,123,125,10,35,32,32,32,32,32,32,32,32,32,107,101,121,32,61,32,97,114,103,115,10,35,32,32,32,32,32,32,32,32,32,105,102,32,107,101,121,32,110,111,116,32,105,110,32,102,46,95,95,99,97,99,104,101,95,95,58,10,35,32,32,32,32,32,32,32,32,32,32,32,32,32,102,46,95,95,99,97,99,104,101,95,95,91,107,101,121,93,32,61,32,102,40,42,97,114,103,115,41,10,35,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,102,46,95,95,99,97,99,104,101,95,95,91,107,101,121,93,10,35,32,32,32,32,32,114,101,116,117,114,110,32,119,114,97,112,112,101,114,10,10,99,108,97,115,115,32,99,97,99,104,101,58,10,32,32,32,32,100,101,102,32,95,95,105,110,105,116,95,95,40,115,101,108,102,44,32,102,41,58,10,32,32,32,32,32,32,32,32,115,101,108,102,46,102,32,61,32,102,10,32,32,32,32,32,32,32,32,115,101,108,102,46,99,97,99,104,101,32,61,32,123,125,10,10,32,32,32,32,100,101,102,32,95,95,99,97,108,108,95,95,40,115,101,108,102,44,32,42,97,114,103,115,41,58,10,32,32,32,32,32,32,32,32,105,102,32,97,114,103,115,32,110,111,116,32,105,110,32,115,101,108,102,46,99,97,99,104,101,58,10,32,32,32,32,32,32,32,32,32,32,32,32,115,101,108,102,46,99,97,99,104,101,91,97,114,103,115,93,32,61,32,115,101,108,102,46,102,40,42,97,114,103,115,41,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,46,99,97,99,104,101,91,97,114,103,115,93,0}; diff --git a/include/pocketpy/common.h b/include/pocketpy/common.h index 4bd2c098..c1ea3120 100644 --- a/include/pocketpy/common.h +++ b/include/pocketpy/common.h @@ -21,7 +21,7 @@ #include #include -#define PK_VERSION "1.4.3" +#define PK_VERSION "1.4.4" #include "config.h" #include "export.h" diff --git a/include/pocketpy/expr.h b/include/pocketpy/expr.h index d030c2ad..b5df6f58 100644 --- a/include/pocketpy/expr.h +++ b/include/pocketpy/expr.h @@ -105,6 +105,7 @@ struct CodeEmitContext{ void exit_block(); void emit_expr(); // clear the expression stack and generate bytecode int emit_(Opcode opcode, uint16_t arg, int line, bool is_virtual=false); + void revert_last_emit_(); int emit_int(i64 value, int line); void patch_jump(int index); bool add_label(StrName name); @@ -113,6 +114,7 @@ struct CodeEmitContext{ int add_const_string(std::string_view); int add_func_decl(FuncDecl_ decl); void emit_store_name(NameScope scope, StrName name, int line); + void try_merge_for_iter_store(int); }; struct NameExpr: Expr{ diff --git a/include/pocketpy/opcodes.h b/include/pocketpy/opcodes.h index bb98b568..269cf094 100644 --- a/include/pocketpy/opcodes.h +++ b/include/pocketpy/opcodes.h @@ -133,6 +133,9 @@ OPCODE(UNARY_INVERT) /**************************/ OPCODE(GET_ITER) OPCODE(FOR_ITER) +OPCODE(FOR_ITER_STORE_FAST) +OPCODE(FOR_ITER_STORE_GLOBAL) +OPCODE(FOR_ITER_YIELD_VALUE) /**************************/ OPCODE(IMPORT_PATH) OPCODE(POP_IMPORT_STAR) diff --git a/include/pocketpy/str.h b/include/pocketpy/str.h index 5afa7e8e..3bcf7c95 100644 --- a/include/pocketpy/str.h +++ b/include/pocketpy/str.h @@ -224,6 +224,7 @@ const StrName __all__ = StrName::get("__all__"); const StrName __package__ = StrName::get("__package__"); const StrName __path__ = StrName::get("__path__"); const StrName __class__ = StrName::get("__class__"); +const StrName __missing__ = StrName::get("__missing__"); const StrName pk_id_add = StrName::get("add"); const StrName pk_id_set = StrName::get("set"); diff --git a/include/pocketpy/vm.h b/include/pocketpy/vm.h index 6aa0ad1f..4edbdb19 100644 --- a/include/pocketpy/vm.h +++ b/include/pocketpy/vm.h @@ -82,7 +82,6 @@ struct PyTypeInfo{ void (*m__setattr__)(VM* vm, PyObject*, StrName, PyObject*) = nullptr; PyObject* (*m__getattr__)(VM* vm, PyObject*, StrName) = nullptr; bool (*m__delattr__)(VM* vm, PyObject*, StrName) = nullptr; - }; typedef void(*PrintFunc)(const char*, int); diff --git a/python/collections.py b/python/collections.py index 05fdd03d..7cf375ac 100644 --- a/python/collections.py +++ b/python/collections.py @@ -7,63 +7,19 @@ def Counter(iterable): a[x] = 1 return a -class defaultdict: - def __init__(self, default_factory) -> None: +class defaultdict(dict): + def __init__(self, default_factory, *args): + super().__init__(*args) + self._enable_instance_dict() self.default_factory = default_factory - self._a = {} - def __getitem__(self, key): - if key not in self._a: - self._a[key] = self.default_factory() - return self._a[key] - - def __setitem__(self, key, value): - self._a[key] = value - - def __delitem__(self, key): - del self._a[key] + def __missing__(self, key): + self[key] = self.default_factory() + return self[key] def __repr__(self) -> str: - return f"defaultdict({self.default_factory}, {self._a})" - - def __eq__(self, __o: object) -> bool: - if not isinstance(__o, defaultdict): - return False - if self.default_factory != __o.default_factory: - return False - return self._a == __o._a - - def __iter__(self): - return iter(self._a) - - def __contains__(self, key): - return key in self._a - - def __len__(self): - return len(self._a) - - def keys(self): - return self._a.keys() - - def values(self): - return self._a.values() - - def items(self): - return self._a.items() - - def pop(self, *args): - return self._a.pop(*args) - - def clear(self): - self._a.clear() + return f"defaultdict({self.default_factory}, {super().__repr__()})" def copy(self): - new_dd = defaultdict(self.default_factory) - new_dd._a = self._a.copy() - return new_dd - - def get(self, key, default): - return self._a.get(key, default) - - def update(self, other): - self._a.update(other) + return defaultdict(self.default_factory, self) + diff --git a/src/ceval.cpp b/src/ceval.cpp index 5fb54671..e559f779 100644 --- a/src/ceval.cpp +++ b/src/ceval.cpp @@ -719,9 +719,34 @@ __NEXT_STEP:; if(_0 != StopIteration){ PUSH(_0); }else{ - frame->jump_abs_break(&s_data, byte.arg); + frame->jump_abs_break(&s_data, co->_get_block_codei(frame->_ip).end); } } DISPATCH(); + TARGET(FOR_ITER_STORE_FAST){ + PyObject* _0 = py_next(TOP()); + if(_0 != StopIteration){ + frame->_locals[byte.arg] = _0; + }else{ + frame->jump_abs_break(&s_data, co->_get_block_codei(frame->_ip).end); + } + } DISPATCH() + TARGET(FOR_ITER_STORE_GLOBAL){ + PyObject* _0 = py_next(TOP()); + if(_0 != StopIteration){ + frame->f_globals().set(StrName(byte.arg), _0); + }else{ + frame->jump_abs_break(&s_data, co->_get_block_codei(frame->_ip).end); + } + } DISPATCH() + TARGET(FOR_ITER_YIELD_VALUE){ + PyObject* _0 = py_next(TOP()); + if(_0 != StopIteration){ + PUSH(_0); + return PY_OP_YIELD; + }else{ + frame->jump_abs_break(&s_data, co->_get_block_codei(frame->_ip).end); + } + } DISPATCH() /*****************************************/ TARGET(IMPORT_PATH){ PyObject* _0 = co->consts[byte.arg]; @@ -877,8 +902,16 @@ __NEXT_STEP:; *p = VAR(CAST(i64, *p) - 1); } DISPATCH(); /*****************************************/ - static_assert(OP_DEC_GLOBAL == 133); - case 134: case 135: case 136: case 137: case 138: case 139: case 140: case 141: case 142: case 143: case 144: case 145: case 146: case 147: case 148: case 149: case 150: case 151: case 152: case 153: case 154: case 155: case 156: case 157: case 158: case 159: case 160: case 161: case 162: case 163: case 164: case 165: case 166: case 167: case 168: case 169: case 170: case 171: case 172: case 173: case 174: case 175: case 176: case 177: case 178: case 179: case 180: case 181: case 182: case 183: case 184: case 185: case 186: case 187: case 188: case 189: case 190: case 191: case 192: case 193: case 194: case 195: case 196: case 197: case 198: case 199: case 200: case 201: case 202: case 203: case 204: case 205: case 206: case 207: case 208: case 209: case 210: case 211: case 212: case 213: case 214: case 215: case 216: case 217: case 218: case 219: case 220: case 221: case 222: case 223: case 224: case 225: case 226: case 227: case 228: case 229: case 230: case 231: case 232: case 233: case 234: case 235: case 236: case 237: case 238: case 239: case 240: case 241: case 242: case 243: case 244: case 245: case 246: case 247: case 248: case 249: case 250: case 251: case 252: case 253: case 254: case 255: PK_UNREACHABLE() break; + static_assert(OP_DEC_GLOBAL == 136); + case 137: case 138: case 139: case 140: case 141: case 142: case 143: case 144: case 145: case 146: case 147: case 148: case 149: + case 150: case 151: case 152: case 153: case 154: case 155: case 156: case 157: case 158: case 159: case 160: case 161: case 162: case 163: case 164: + case 165: case 166: case 167: case 168: case 169: case 170: case 171: case 172: case 173: case 174: case 175: case 176: case 177: case 178: case 179: + case 180: case 181: case 182: case 183: case 184: case 185: case 186: case 187: case 188: case 189: case 190: case 191: case 192: case 193: case 194: + case 195: case 196: case 197: case 198: case 199: case 200: case 201: case 202: case 203: case 204: case 205: case 206: case 207: case 208: case 209: + case 210: case 211: case 212: case 213: case 214: case 215: case 216: case 217: case 218: case 219: case 220: case 221: case 222: case 223: case 224: + case 225: case 226: case 227: case 228: case 229: case 230: case 231: case 232: case 233: case 234: case 235: case 236: case 237: case 238: case 239: + case 240: case 241: case 242: case 243: case 244: case 245: case 246: case 247: case 248: case 249: case 250: case 251: case 252: case 253: case 254: + case 255: break; } } diff --git a/src/compiler.cpp b/src/compiler.cpp index 1fff3aed..9b6bc251 100644 --- a/src/compiler.cpp +++ b/src/compiler.cpp @@ -50,15 +50,13 @@ namespace pkpy{ // json mode does not contain jump instructions, so it is safe to ignore this check SyntaxError("maximum number of opcodes exceeded"); } - // pre-compute LOOP_BREAK and LOOP_CONTINUE and FOR_ITER + // pre-compute LOOP_BREAK and LOOP_CONTINUE for(int i=0; ico->blocks[bc.arg].start; }else if(bc.op == OP_LOOP_BREAK){ bc.arg = ctx()->co->blocks[bc.arg].get_break_end(); - }else if(bc.op == OP_FOR_ITER){ - bc.arg = ctx()->co->_get_block_codei(i).end; } } // pre-compute func->is_simple @@ -658,9 +656,10 @@ __EAT_DOTS_END: EXPR_TUPLE(); ctx()->emit_expr(); ctx()->emit_(OP_GET_ITER, BC_NOARG, BC_KEEPLINE); CodeBlock* block = ctx()->enter_block(CodeBlockType::FOR_LOOP); - ctx()->emit_(OP_FOR_ITER, BC_NOARG, BC_KEEPLINE); + int for_codei = ctx()->emit_(OP_FOR_ITER, BC_NOARG, BC_KEEPLINE); bool ok = vars->emit_store(ctx()); if(!ok) SyntaxError(); // this error occurs in `vars` instead of this line, but...nevermind + ctx()->try_merge_for_iter_store(for_codei); compile_block_body(); ctx()->emit_(OP_LOOP_CONTINUE, ctx()->get_loop(), BC_KEEPLINE, true); ctx()->exit_block(); @@ -822,8 +821,7 @@ __EAT_DOTS_END: ctx()->co->is_generator = true; ctx()->emit_(OP_GET_ITER, BC_NOARG, kw_line); ctx()->enter_block(CodeBlockType::FOR_LOOP); - ctx()->emit_(OP_FOR_ITER, BC_NOARG, kw_line); - ctx()->emit_(OP_YIELD_VALUE, BC_NOARG, kw_line); + ctx()->emit_(OP_FOR_ITER_YIELD_VALUE, BC_NOARG, kw_line); ctx()->emit_(OP_LOOP_CONTINUE, ctx()->get_loop(), kw_line); ctx()->exit_block(); consume_end_stmt(); diff --git a/src/expr.cpp b/src/expr.cpp index 76d5981d..132cbcac 100644 --- a/src/expr.cpp +++ b/src/expr.cpp @@ -60,6 +60,31 @@ namespace pkpy{ return i; } + void CodeEmitContext::revert_last_emit_(){ + co->codes.pop_back(); + co->iblocks.pop_back(); + co->lines.pop_back(); + } + + void CodeEmitContext::try_merge_for_iter_store(int i){ + // [FOR_ITER, STORE_?, ] + if(co->codes[i].op != OP_FOR_ITER) return; + if(co->codes.size() - i != 2) return; + uint16_t arg = co->codes[i+1].arg; + if(co->codes[i+1].op == OP_STORE_FAST){ + revert_last_emit_(); + co->codes[i].op = OP_FOR_ITER_STORE_FAST; + co->codes[i].arg = arg; + return; + } + if(co->codes[i+1].op == OP_STORE_GLOBAL){ + revert_last_emit_(); + co->codes[i].op = OP_FOR_ITER_STORE_GLOBAL; + co->codes[i].arg = arg; + return; + } + } + int CodeEmitContext::emit_int(i64 value, int line){ bool allow_neg_int = is_negative_shift_well_defined() || value >= 0; if(allow_neg_int && value >= -5 && value <= 16){ @@ -370,10 +395,11 @@ namespace pkpy{ iter->emit_(ctx); ctx->emit_(OP_GET_ITER, BC_NOARG, BC_KEEPLINE); ctx->enter_block(CodeBlockType::FOR_LOOP); - ctx->emit_(OP_FOR_ITER, BC_NOARG, BC_KEEPLINE); + int for_codei = ctx->emit_(OP_FOR_ITER, BC_NOARG, BC_KEEPLINE); bool ok = vars->emit_store(ctx); // this error occurs in `vars` instead of this line, but...nevermind PK_ASSERT(ok); // TODO: raise a SyntaxError instead + ctx->try_merge_for_iter_store(for_codei); if(cond){ cond->emit_(ctx); int patch = ctx->emit_(OP_POP_JUMP_IF_FALSE, BC_NOARG, BC_KEEPLINE); diff --git a/src/io.cpp b/src/io.cpp index af77086e..d22650ff 100644 --- a/src/io.cpp +++ b/src/io.cpp @@ -77,7 +77,7 @@ void FileIO::_register(VM* vm, PyObject* mod, PyObject* type){ buffer_size = size; } unsigned char* buffer = new unsigned char[buffer_size]; - size_t actual_size = io_fread(buffer, 1, buffer_size, io.fp); + i64 actual_size = io_fread(buffer, 1, buffer_size, io.fp); PK_ASSERT(actual_size <= buffer_size); // in text mode, CR may be dropped, which may cause `actual_size < buffer_size` Bytes b(buffer, actual_size); diff --git a/src/pocketpy.cpp b/src/pocketpy.cpp index 1b407038..37284b63 100644 --- a/src/pocketpy.cpp +++ b/src/pocketpy.cpp @@ -399,31 +399,37 @@ void init_builtins(VM* _vm) { if(args.size() == 1+0) return VAR(0); // 1 arg if(args.size() == 1+1){ - if (is_type(args[1], vm->tp_float)) return VAR((i64)CAST(f64, args[1])); - if (is_type(args[1], vm->tp_int)) return args[1]; - if (is_type(args[1], vm->tp_bool)) return VAR(_CAST(bool, args[1]) ? 1 : 0); + switch(vm->_tp(args[1]).index){ + case VM::tp_float.index: + return VAR((i64)_CAST(f64, args[1])); + case VM::tp_int.index: + return args[1]; + case VM::tp_bool.index: + return VAR(args[1]==vm->True ? 1 : 0); + case VM::tp_str.index: + break; + default: + vm->TypeError("invalid arguments for int()"); + } } + // 2+ args -> error if(args.size() > 1+2) vm->TypeError("int() takes at most 2 arguments"); - // 2 args - if (is_type(args[1], vm->tp_str)) { - int base = 10; - if(args.size() == 1+2) base = CAST(i64, args[2]); - const Str& s = CAST(Str&, args[1]); - std::string_view sv = s.sv(); - bool negative = false; - if(!sv.empty() && (sv[0] == '+' || sv[0] == '-')){ - negative = sv[0] == '-'; - sv.remove_prefix(1); - } - i64 val; - if(parse_int(sv, &val, base) != IntParsingResult::Success){ - vm->ValueError(_S("invalid literal for int() with base ", base, ": ", s.escape())); - } - if(negative) val = -val; - return VAR(val); + // 1 or 2 args with str + int base = 10; + if(args.size() == 1+2) base = CAST(i64, args[2]); + const Str& s = CAST(Str&, args[1]); + std::string_view sv = s.sv(); + bool negative = false; + if(!sv.empty() && (sv[0] == '+' || sv[0] == '-')){ + negative = sv[0] == '-'; + sv.remove_prefix(1); } - vm->TypeError("invalid arguments for int()"); - return vm->None; + i64 val; + if(parse_int(sv, &val, base) != IntParsingResult::Success){ + vm->ValueError(_S("invalid literal for int() with base ", base, ": ", s.escape())); + } + if(negative) val = -val; + return VAR(val); }); _vm->bind__floordiv__(VM::tp_int, [](VM* vm, PyObject* _0, PyObject* _1) { @@ -438,6 +444,14 @@ void init_builtins(VM* _vm) { return VAR(_CAST(i64, _0) % rhs); }); + _vm->bind_method<0>(VM::tp_int, "bit_length", [](VM* vm, ArgsView args) { + i64 x = _CAST(i64, args[0]); + if(x < 0) x = -x; + int bits = 0; + while(x){ x >>= 1; bits++; } + return VAR(bits); + }); + _vm->bind__repr__(VM::tp_int, [](VM* vm, PyObject* obj) { return VAR(std::to_string(_CAST(i64, obj))); }); _vm->bind__neg__(VM::tp_int, [](VM* vm, PyObject* obj) { return VAR(-_CAST(i64, obj)); }); _vm->bind__hash__(VM::tp_int, [](VM* vm, PyObject* obj) { return _CAST(i64, obj); }); @@ -460,26 +474,32 @@ void init_builtins(VM* _vm) { if(args.size() == 1+0) return VAR(0.0); if(args.size() > 1+1) vm->TypeError("float() takes at most 1 argument"); // 1 arg - if (is_type(args[1], vm->tp_int)) return VAR((f64)CAST(i64, args[1])); - if (is_type(args[1], vm->tp_float)) return args[1]; - if (is_type(args[1], vm->tp_bool)) return VAR(_CAST(bool, args[1]) ? 1.0 : 0.0); - if (is_type(args[1], vm->tp_str)) { - const Str& s = CAST(Str&, args[1]); - if(s == "inf") return VAR(INFINITY); - if(s == "-inf") return VAR(-INFINITY); - - double float_out; - char* p_end; - try{ - float_out = std::strtod(s.data, &p_end); - PK_ASSERT(p_end == s.end()); - }catch(...){ - vm->ValueError("invalid literal for float(): " + s.escape()); - } - return VAR(float_out); + switch(vm->_tp(args[1]).index){ + case VM::tp_int.index: + return VAR((f64)CAST(i64, args[1])); + case VM::tp_float.index: + return args[1]; + case VM::tp_bool.index: + return VAR(args[1]==vm->True ? 1.0 : 0.0); + case VM::tp_str.index: + break; + default: + vm->TypeError("invalid arguments for float()"); } - vm->TypeError("invalid arguments for float()"); - return vm->None; + // str to float + const Str& s = PK_OBJ_GET(Str, args[1]); + if(s == "inf") return VAR(INFINITY); + if(s == "-inf") return VAR(-INFINITY); + + double float_out; + char* p_end; + try{ + float_out = std::strtod(s.data, &p_end); + PK_ASSERT(p_end == s.end()); + }catch(...){ + vm->ValueError("invalid literal for float(): " + s.escape()); + } + return VAR(float_out); }); _vm->bind__hash__(VM::tp_float, [](VM* vm, PyObject* _0) { @@ -1216,37 +1236,53 @@ void init_builtins(VM* _vm) { // tp_dict _vm->bind_constructor<-1>(_vm->_t(VM::tp_dict), [](VM* vm, ArgsView args){ - return VAR(Dict(vm)); + Type cls_t = PK_OBJ_GET(Type, args[0]); + return vm->heap.gcnew(cls_t, vm); }); _vm->bind_method<-1>(VM::tp_dict, "__init__", [](VM* vm, ArgsView args){ if(args.size() == 1+0) return vm->None; if(args.size() == 1+1){ auto _lock = vm->heap.gc_scope_lock(); - Dict& self = _CAST(Dict&, args[0]); - List& list = CAST(List&, args[1]); - for(PyObject* item : list){ - Tuple& t = CAST(Tuple&, item); - if(t.size() != 2){ - vm->ValueError("dict() takes an iterable of tuples (key, value)"); - return vm->None; + Dict& self = PK_OBJ_GET(Dict, args[0]); + if(is_non_tagged_type(args[1], vm->tp_dict)){ + Dict& other = CAST(Dict&, args[1]); + self.update(other); + return vm->None; + } + if(is_non_tagged_type(args[1], vm->tp_list)){ + List& list = PK_OBJ_GET(List, args[1]); + for(PyObject* item : list){ + Tuple& t = CAST(Tuple&, item); + if(t.size() != 2){ + vm->ValueError("dict() takes an iterable of tuples (key, value)"); + return vm->None; + } + self.set(t[0], t[1]); } - self.set(t[0], t[1]); } return vm->None; } vm->TypeError("dict() takes at most 1 argument"); - return vm->None; + PK_UNREACHABLE() }); _vm->bind__len__(VM::tp_dict, [](VM* vm, PyObject* _0) { - return (i64)_CAST(Dict&, _0).size(); + return (i64)PK_OBJ_GET(Dict, _0).size(); }); _vm->bind__getitem__(VM::tp_dict, [](VM* vm, PyObject* _0, PyObject* _1) { - Dict& self = _CAST(Dict&, _0); + Dict& self = PK_OBJ_GET(Dict, _0); PyObject* ret = self.try_get(_1); - if(ret == nullptr) vm->KeyError(_1); + if(ret == nullptr){ + // try __missing__ + PyObject* self; + PyObject* f_missing = vm->get_unbound_method(_0, __missing__, &self, false); + if(f_missing != nullptr){ + return vm->call_method(self, f_missing, _1); + } + vm->KeyError(_1); + } return ret; }); @@ -1360,7 +1396,7 @@ void init_builtins(VM* _vm) { _vm->bind__eq__(VM::tp_dict, [](VM* vm, PyObject* _0, PyObject* _1) { Dict& self = _CAST(Dict&, _0); - if(!is_non_tagged_type(_1, vm->tp_dict)) return vm->NotImplemented; + if(!vm->isinstance(_1, vm->tp_dict)) return vm->NotImplemented; Dict& other = _CAST(Dict&, _1); if(self.size() != other.size()) return vm->False; for(int i=0; ivarnames[byte.arg].sv(), ")").sv(); break; case OP_LOAD_FUNCTION: @@ -594,7 +594,7 @@ Str VM::disassemble(CodeObject_ co){ pod_vector jumpTargets; for(auto byte : co->codes){ - if(byte.op == OP_JUMP_ABSOLUTE || byte.op == OP_POP_JUMP_IF_FALSE || byte.op == OP_SHORTCUT_IF_FALSE_OR_POP || byte.op == OP_FOR_ITER){ + if(byte.op == OP_JUMP_ABSOLUTE || byte.op == OP_POP_JUMP_IF_FALSE || byte.op == OP_SHORTCUT_IF_FALSE_OR_POP){ jumpTargets.push_back(byte.arg); } if(byte.op == OP_GOTO){ @@ -714,7 +714,7 @@ void VM::init_builtin_types(){ if(tp_exception != _new_type_object("Exception", 0, true)) exit(-3); if(tp_bytes != _new_type_object("bytes")) exit(-3); if(tp_mappingproxy != _new_type_object("mappingproxy")) exit(-3); - if(tp_dict != _new_type_object("dict")) exit(-3); + if(tp_dict != _new_type_object("dict", 0, true)) exit(-3); // dict can be subclassed if(tp_property != _new_type_object("property")) exit(-3); if(tp_star_wrapper != _new_type_object("_star_wrapper")) exit(-3); @@ -1301,7 +1301,7 @@ void VM::bind__hash__(Type type, i64 (*f)(VM*, PyObject*)){ PyObject* obj = _t(type); _all_types[type].m__hash__ = f; PyObject* nf = bind_method<0>(obj, "__hash__", [](VM* vm, ArgsView args){ - i64 ret = lambda_get_userdata(args.begin())(vm, args[0]); + i64 ret = lambda_get_userdata(args.begin())(vm, args[0]); return VAR(ret); }); PK_OBJ_GET(NativeFunc, nf).set_userdata(f); @@ -1311,7 +1311,7 @@ void VM::bind__len__(Type type, i64 (*f)(VM*, PyObject*)){ PyObject* obj = _t(type); _all_types[type].m__len__ = f; PyObject* nf = bind_method<0>(obj, "__len__", [](VM* vm, ArgsView args){ - i64 ret = lambda_get_userdata(args.begin())(vm, args[0]); + i64 ret = lambda_get_userdata(args.begin())(vm, args[0]); return VAR(ret); }); PK_OBJ_GET(NativeFunc, nf).set_userdata(f); diff --git a/tests/01_int.py b/tests/01_int.py index ce96102c..2c13964c 100644 --- a/tests/01_int.py +++ b/tests/01_int.py @@ -52,7 +52,23 @@ assert x == 3 assert str(1) == '1' assert repr(1) == '1' +# test bit_length +assert (1).bit_length() == 1 +assert (2).bit_length() == 2 +assert (3).bit_length() == 2 + +assert (-1).bit_length() == 1 +assert (-2).bit_length() == 2 +assert (-3).bit_length() == 2 + +assert (123123123123123).bit_length() == 47 +assert (-3123123123).bit_length() == 32 + # test int() +assert int() == 0 +assert int(True) == 1 +assert int(False) == 0 + assert int(1) == 1 assert int(1.0) == 1 assert int(1.1) == 1 diff --git a/tests/02_float.py b/tests/02_float.py index 2b2587c3..07d972b8 100644 --- a/tests/02_float.py +++ b/tests/02_float.py @@ -36,6 +36,12 @@ assert str(1.0) == '1.0' assert repr(1.0) == '1.0' # test float() +assert float() == 0.0 +assert float(True) == 1.0 +assert float(False) == 0.0 +assert float(1) == 1.0 +assert float(-2) == -2.0 + assert eq(float(1), 1.0) assert eq(float(1.0), 1.0) assert eq(float(1.1), 1.1) diff --git a/tests/70_collections.py b/tests/70_collections.py index c6c13262..e444c1ea 100644 --- a/tests/70_collections.py +++ b/tests/70_collections.py @@ -2,15 +2,15 @@ from collections import Counter, deque, defaultdict import random import pickle import gc -import builtins -dd_dict_keys = sorted(defaultdict.__dict__.keys()) -d_dict_keys = sorted(dict.__dict__.keys()) -d_dict_keys.remove('__new__') -if dd_dict_keys != d_dict_keys: - print("dd_dict_keys:", dd_dict_keys) - print("d_dict_keys:", d_dict_keys) - raise Exception("dd_dict_keys != d_dict_keys") +# test defaultdict +assert issubclass(defaultdict, dict) +a = defaultdict(int) +a['1'] += 1 +assert a == {'1': 1} +a = defaultdict(list) +a['1'].append(1) +assert a == {'1': [1]} q = deque() q.append(1) diff --git a/tests/99_builtin_func.py b/tests/99_builtin_func.py index fdda3383..afe89381 100644 --- a/tests/99_builtin_func.py +++ b/tests/99_builtin_func.py @@ -160,22 +160,6 @@ class A(): repr(A()) - -# 未完全测试准确性----------------------------------------------- -# 33600: 318: _vm->bind_constructor<-1>("range", [](VM* vm, ArgsView args) { -# 16742: 319: args._begin += 1; // skip cls -# 16742: 320: Range r; -# 16742: 321: switch (args.size()) { -# 8735: 322: case 1: r.stop = CAST(i64, args[0]); break; -# 3867: 323: case 2: r.start = CAST(i64, args[0]); r.stop = CAST(i64, args[1]); break; -# 4140: 324: case 3: r.start = CAST(i64, args[0]); r.stop = CAST(i64, args[1]); r.step = CAST(i64, args[2]); break; -# #####: 325: default: vm->TypeError("expected 1-3 arguments, got " + std::to_string(args.size())); -# #####: 326: } -# 33484: 327: return VAR(r); -# 16742: 328: }); -# -: 329: -# test range: - try: range(1,2,3,4) print('未能拦截错误, 在测试 range')