From b9dcaa9fd15493c2492015e2787b0dcc03e378c3 Mon Sep 17 00:00:00 2001 From: Dima Granetchi Date: Fri, 20 Dec 2024 19:32:38 +0200 Subject: [PATCH] add unit test for multi-push functionality in array --- examples/test/unit_tests/array.das | 27 ++ src/builtin/builtin.das | 94 +++++- src/builtin/builtin.das.inc | 525 ++++++++++++++++++++++++++++- 3 files changed, 634 insertions(+), 12 deletions(-) diff --git a/examples/test/unit_tests/array.das b/examples/test/unit_tests/array.das index 586832c76..117d246d0 100644 --- a/examples/test/unit_tests/array.das +++ b/examples/test/unit_tests/array.das @@ -136,6 +136,7 @@ def test:bool testIntArray() testConstInArray() testInterop() + testMultiPush() return true // this test bellow is only here to make sure AOT compiles and runs for array @@ -160,3 +161,29 @@ def testConstInArray var b : Foo const[10] testAccept(a, b) +[sideeffects] +def testMultiPush() + var a : array + var b : array + push(b, a) + verify(length(a)==0) + verify(length(b)==0) + + a <- [Foo(bar=1), Foo(bar=2)] + push(b, a) + verify(length(a)==2) + verify(length(b)==2) + verify(a[0].bar==1) + verify(a[1].bar==2) + verify(b[0].bar==1) + verify(b[1].bar==2) + + var c = fixed_array(Foo(bar=3)) + push(b, c) + verify(length(b)==3) + verify(b[2].bar==3) + verify(c[0].bar==3) + + push_clone(b, c) + verify(length(b)==4) + verify(b[3].bar==3) diff --git a/src/builtin/builtin.das b/src/builtin/builtin.das index 7f3ef1ca1..b7a30c727 100644 --- a/src/builtin/builtin.das +++ b/src/builtin/builtin.das @@ -141,7 +141,20 @@ def push(var Arr:array;var value:numT-# ==const) concept_assert(false,"can't push value, which can't be copied") [unused_argument(Arr, value)] -def push(var Arr:array; varr:array-#) +def push(var Arr:array; varr:array ==const) + static_if typeinfo(can_copy type) + static_if typeinfo(need_lock_check type) + _builtin_verify_locks(Arr) + static_if typeinfo(can_clone_from_const varr[0]) + for t in varr + Arr[__builtin_array_push_back(Arr,typeinfo(sizeof Arr[0]))] = t + else + concept_assert(false,"can't push value, which can't be cloned from const") + else + concept_assert(false,"can't push value, which can't be copied") + +[unused_argument(Arr, value)] +def push(var Arr:array; var varr:array ==const) static_if typeinfo(can_copy type) static_if typeinfo(need_lock_check type) _builtin_verify_locks(Arr) @@ -161,7 +174,22 @@ def push(var Arr:array; varr:numT[]-#) concept_assert(false,"can't push value, which can't be copied") [unused_argument(Arr, value)] -def push(var Arr:array; varr:numT[]-#) +def push(var Arr:array; varr:numT[]-# ==const) + static_if typeinfo(can_copy type) + static_if typeinfo(sizeof Arr[0])==typeinfo(sizeof varr) + static_if typeinfo(need_lock_check type) + _builtin_verify_locks(Arr) + static_if typeinfo(can_clone_from_const varr) + Arr[__builtin_array_push_back(Arr,typeinfo(sizeof Arr[0]))] = varr + else + concept_assert(false,"can't push array of different size") + else + concept_assert(false,"can't push array of different size") + else + concept_assert(false,"can't push value, which can't be copied") + +[unused_argument(Arr, value)] +def push(var Arr:array; var varr:numT[]-# ==const) static_if typeinfo(can_copy type) static_if typeinfo(sizeof Arr[0])==typeinfo(sizeof varr) static_if typeinfo(need_lock_check type) @@ -212,7 +240,20 @@ def emplace(var Arr:array;var value:numT[]-#) else concept_assert(false,"can't emplace value, which can't be moved") -def push_clone(var Arr:array;value:numT|#;at:int) +[unused_argument(Arr, value, at)] +def push_clone(var Arr:array;value:numT ==const|#;at:int) + static_if typeinfo(can_clone value) + static_if typeinfo(need_lock_check type) + _builtin_verify_locks(Arr) + static_if typeinfo(can_clone_from_const value) + Arr[__builtin_array_push_zero(Arr,at,typeinfo(sizeof Arr[0]))] := value + else + concept_assert(false,"can't push-clone value, which can't be cloned from const") + else + concept_assert(false,"can't push-clone value, which can't be cloned") + +[unused_argument(Arr, value, at)] +def push_clone(var Arr:array;var value:numT ==const|#;at:int) static_if typeinfo(can_clone value) static_if typeinfo(need_lock_check type) _builtin_verify_locks(Arr) @@ -220,7 +261,8 @@ def push_clone(var Arr:array;value:numT|#;at:int) else concept_assert(false,"can't push-clone value, which can't be cloned") -def push_clone(var Arr:array;value:numT|#) +[unused_argument(Arr, value)] +def push_clone(var Arr:array;value:numT ==const|#) static_if typeinfo(can_clone value) static_if typeinfo(need_lock_check type) _builtin_verify_locks(Arr) @@ -231,7 +273,30 @@ def push_clone(var Arr:array;value:numT|#) else concept_assert(false,"can't push-clone value, which can't be cloned") -def push_clone(var Arr:array; varr:numT[]) +[unused_argument(Arr, value)] +def push_clone(var Arr:array;var value:numT ==const|#) + static_if typeinfo(can_clone value) + static_if typeinfo(need_lock_check type) + _builtin_verify_locks(Arr) + Arr[__builtin_array_push_back_zero(Arr,typeinfo(sizeof Arr[0]))] := value + else + concept_assert(false,"can't push-clone value, which can't be cloned") + +[unused_argument(Arr, value)] +def push_clone(var Arr:array; varr:numT[] ==const) + static_if typeinfo(can_clone type) + static_if typeinfo(need_lock_check type) + _builtin_verify_locks(Arr) + static_if typeinfo(can_clone_from_const varr[0]) + for t in varr + Arr[__builtin_array_push_back(Arr,typeinfo(sizeof Arr[0]))] := t + else + concept_assert(false,"can't push-clone value, which can't be cloned from const") + else + concept_assert(false,"can't push_clone value, which can't be cloned") + +[unused_argument(Arr, value)] +def push_clone(var Arr:array; var varr:numT[] ==const) static_if typeinfo(can_clone type) static_if typeinfo(need_lock_check type) _builtin_verify_locks(Arr) @@ -240,7 +305,24 @@ def push_clone(var Arr:array; varr:numT[]) else concept_assert(false,"can't push_clone value, which can't be cloned") -def push_clone(var Arr:array; varr:numT[]) +[unused_argument(Arr, value)] +def push_clone(var Arr:array; varr:numT[] ==const) + static_if typeinfo(can_copy type) + static_if typeinfo(sizeof Arr[0])==typeinfo(sizeof varr) + static_if typeinfo(need_lock_check type) + _builtin_verify_locks(Arr) + if typeinfo(can_clone_from_const varr) + for t in varr + Arr[__builtin_array_push_back(Arr,typeinfo(sizeof Arr[0]))] := t + else + concept_assert(false,"can't push-clone value, which can't be cloned from const") + else + concept_assert(false,"can't push_clone array of different size") + else + concept_assert(false,"can't push value, which can't be cloned") + +[unused_argument(Arr, value)] +def push_clone(var Arr:array; var varr:numT[]) static_if typeinfo(can_copy type) static_if typeinfo(sizeof Arr[0])==typeinfo(sizeof varr) static_if typeinfo(need_lock_check type) diff --git a/src/builtin/builtin.das.inc b/src/builtin/builtin.das.inc index 59b4a79e5..23b1d2df5 100644 --- a/src/builtin/builtin.das.inc +++ b/src/builtin/builtin.das.inc @@ -729,7 +729,86 @@ static unsigned char builtin_das[] = { 0x75,0x74,0x6f,0x28,0x6e,0x75,0x6d,0x54, 0x29,0x3e,0x3b,0x20,0x76,0x61,0x72,0x72, 0x3a,0x61,0x72,0x72,0x61,0x79,0x3c,0x6e, -0x75,0x6d,0x54,0x3e,0x2d,0x23,0x29,0x0a, +0x75,0x6d,0x54,0x2d,0x23,0x3e,0x20,0x3d, +0x3d,0x63,0x6f,0x6e,0x73,0x74,0x29,0x0a, +0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, +0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, +0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x63, +0x61,0x6e,0x5f,0x63,0x6f,0x70,0x79,0x20, +0x74,0x79,0x70,0x65,0x3c,0x6e,0x75,0x6d, +0x54,0x3e,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x69, +0x66,0x20,0x74,0x79,0x70,0x65,0x69,0x6e, +0x66,0x6f,0x28,0x6e,0x65,0x65,0x64,0x5f, +0x6c,0x6f,0x63,0x6b,0x5f,0x63,0x68,0x65, +0x63,0x6b,0x20,0x74,0x79,0x70,0x65,0x3c, +0x6e,0x75,0x6d,0x54,0x3e,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x5f,0x62,0x75,0x69, +0x6c,0x74,0x69,0x6e,0x5f,0x76,0x65,0x72, +0x69,0x66,0x79,0x5f,0x6c,0x6f,0x63,0x6b, +0x73,0x28,0x41,0x72,0x72,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x69, +0x66,0x20,0x74,0x79,0x70,0x65,0x69,0x6e, +0x66,0x6f,0x28,0x63,0x61,0x6e,0x5f,0x63, +0x6c,0x6f,0x6e,0x65,0x5f,0x66,0x72,0x6f, +0x6d,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x20, +0x76,0x61,0x72,0x72,0x5b,0x30,0x5d,0x29, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20, +0x74,0x20,0x69,0x6e,0x20,0x76,0x61,0x72, +0x72,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x41,0x72,0x72,0x5b,0x5f,0x5f,0x62,0x75, +0x69,0x6c,0x74,0x69,0x6e,0x5f,0x61,0x72, +0x72,0x61,0x79,0x5f,0x70,0x75,0x73,0x68, +0x5f,0x62,0x61,0x63,0x6b,0x28,0x41,0x72, +0x72,0x2c,0x74,0x79,0x70,0x65,0x69,0x6e, +0x66,0x6f,0x28,0x73,0x69,0x7a,0x65,0x6f, +0x66,0x20,0x41,0x72,0x72,0x5b,0x30,0x5d, +0x29,0x29,0x5d,0x20,0x3d,0x20,0x74,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x65,0x6c,0x73,0x65,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x63, +0x65,0x70,0x74,0x5f,0x61,0x73,0x73,0x65, +0x72,0x74,0x28,0x66,0x61,0x6c,0x73,0x65, +0x2c,0x22,0x63,0x61,0x6e,0x27,0x74,0x20, +0x70,0x75,0x73,0x68,0x20,0x76,0x61,0x6c, +0x75,0x65,0x2c,0x20,0x77,0x68,0x69,0x63, +0x68,0x20,0x63,0x61,0x6e,0x27,0x74,0x20, +0x62,0x65,0x20,0x63,0x6c,0x6f,0x6e,0x65, +0x64,0x20,0x66,0x72,0x6f,0x6d,0x20,0x63, +0x6f,0x6e,0x73,0x74,0x22,0x29,0x0a, +0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x63,0x6f,0x6e,0x63,0x65,0x70,0x74,0x5f, +0x61,0x73,0x73,0x65,0x72,0x74,0x28,0x66, +0x61,0x6c,0x73,0x65,0x2c,0x22,0x63,0x61, +0x6e,0x27,0x74,0x20,0x70,0x75,0x73,0x68, +0x20,0x76,0x61,0x6c,0x75,0x65,0x2c,0x20, +0x77,0x68,0x69,0x63,0x68,0x20,0x63,0x61, +0x6e,0x27,0x74,0x20,0x62,0x65,0x20,0x63, +0x6f,0x70,0x69,0x65,0x64,0x22,0x29,0x0a, +0x0a, +0x5b,0x75,0x6e,0x75,0x73,0x65,0x64,0x5f, +0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74, +0x28,0x41,0x72,0x72,0x2c,0x20,0x76,0x61, +0x6c,0x75,0x65,0x29,0x5d,0x0a, +0x64,0x65,0x66,0x20,0x70,0x75,0x73,0x68, +0x28,0x76,0x61,0x72,0x20,0x41,0x72,0x72, +0x3a,0x61,0x72,0x72,0x61,0x79,0x3c,0x61, +0x75,0x74,0x6f,0x28,0x6e,0x75,0x6d,0x54, +0x29,0x3e,0x3b,0x20,0x76,0x61,0x72,0x20, +0x76,0x61,0x72,0x72,0x3a,0x61,0x72,0x72, +0x61,0x79,0x3c,0x6e,0x75,0x6d,0x54,0x2d, +0x23,0x3e,0x20,0x3d,0x3d,0x63,0x6f,0x6e, +0x73,0x74,0x29,0x0a, 0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, 0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, 0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x63, @@ -837,7 +916,105 @@ static unsigned char builtin_das[] = { 0x75,0x74,0x6f,0x28,0x6e,0x75,0x6d,0x54, 0x29,0x5b,0x5d,0x3e,0x3b,0x20,0x76,0x61, 0x72,0x72,0x3a,0x6e,0x75,0x6d,0x54,0x5b, -0x5d,0x2d,0x23,0x29,0x0a, +0x5d,0x2d,0x23,0x20,0x3d,0x3d,0x63,0x6f, +0x6e,0x73,0x74,0x29,0x0a, +0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, +0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, +0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x63, +0x61,0x6e,0x5f,0x63,0x6f,0x70,0x79,0x20, +0x74,0x79,0x70,0x65,0x3c,0x6e,0x75,0x6d, +0x54,0x3e,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x69, +0x66,0x20,0x74,0x79,0x70,0x65,0x69,0x6e, +0x66,0x6f,0x28,0x73,0x69,0x7a,0x65,0x6f, +0x66,0x20,0x41,0x72,0x72,0x5b,0x30,0x5d, +0x29,0x3d,0x3d,0x74,0x79,0x70,0x65,0x69, +0x6e,0x66,0x6f,0x28,0x73,0x69,0x7a,0x65, +0x6f,0x66,0x20,0x76,0x61,0x72,0x72,0x29, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, +0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, +0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x6e, +0x65,0x65,0x64,0x5f,0x6c,0x6f,0x63,0x6b, +0x5f,0x63,0x68,0x65,0x63,0x6b,0x20,0x74, +0x79,0x70,0x65,0x3c,0x6e,0x75,0x6d,0x54, +0x3e,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x5f,0x62,0x75,0x69,0x6c,0x74,0x69,0x6e, +0x5f,0x76,0x65,0x72,0x69,0x66,0x79,0x5f, +0x6c,0x6f,0x63,0x6b,0x73,0x28,0x41,0x72, +0x72,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, +0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, +0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x63, +0x61,0x6e,0x5f,0x63,0x6c,0x6f,0x6e,0x65, +0x5f,0x66,0x72,0x6f,0x6d,0x5f,0x63,0x6f, +0x6e,0x73,0x74,0x20,0x76,0x61,0x72,0x72, +0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x41,0x72,0x72,0x5b,0x5f,0x5f,0x62,0x75, +0x69,0x6c,0x74,0x69,0x6e,0x5f,0x61,0x72, +0x72,0x61,0x79,0x5f,0x70,0x75,0x73,0x68, +0x5f,0x62,0x61,0x63,0x6b,0x28,0x41,0x72, +0x72,0x2c,0x74,0x79,0x70,0x65,0x69,0x6e, +0x66,0x6f,0x28,0x73,0x69,0x7a,0x65,0x6f, +0x66,0x20,0x41,0x72,0x72,0x5b,0x30,0x5d, +0x29,0x29,0x5d,0x20,0x3d,0x20,0x76,0x61, +0x72,0x72,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x63,0x6f,0x6e,0x63,0x65,0x70,0x74,0x5f, +0x61,0x73,0x73,0x65,0x72,0x74,0x28,0x66, +0x61,0x6c,0x73,0x65,0x2c,0x22,0x63,0x61, +0x6e,0x27,0x74,0x20,0x70,0x75,0x73,0x68, +0x20,0x61,0x72,0x72,0x61,0x79,0x20,0x6f, +0x66,0x20,0x64,0x69,0x66,0x66,0x65,0x72, +0x65,0x6e,0x74,0x20,0x73,0x69,0x7a,0x65, +0x22,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x65,0x6c,0x73,0x65,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x63, +0x65,0x70,0x74,0x5f,0x61,0x73,0x73,0x65, +0x72,0x74,0x28,0x66,0x61,0x6c,0x73,0x65, +0x2c,0x22,0x63,0x61,0x6e,0x27,0x74,0x20, +0x70,0x75,0x73,0x68,0x20,0x61,0x72,0x72, +0x61,0x79,0x20,0x6f,0x66,0x20,0x64,0x69, +0x66,0x66,0x65,0x72,0x65,0x6e,0x74,0x20, +0x73,0x69,0x7a,0x65,0x22,0x29,0x0a, +0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x63,0x6f,0x6e,0x63,0x65,0x70,0x74,0x5f, +0x61,0x73,0x73,0x65,0x72,0x74,0x28,0x66, +0x61,0x6c,0x73,0x65,0x2c,0x22,0x63,0x61, +0x6e,0x27,0x74,0x20,0x70,0x75,0x73,0x68, +0x20,0x76,0x61,0x6c,0x75,0x65,0x2c,0x20, +0x77,0x68,0x69,0x63,0x68,0x20,0x63,0x61, +0x6e,0x27,0x74,0x20,0x62,0x65,0x20,0x63, +0x6f,0x70,0x69,0x65,0x64,0x22,0x29,0x0a, +0x0a, +0x5b,0x75,0x6e,0x75,0x73,0x65,0x64,0x5f, +0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74, +0x28,0x41,0x72,0x72,0x2c,0x20,0x76,0x61, +0x6c,0x75,0x65,0x29,0x5d,0x0a, +0x64,0x65,0x66,0x20,0x70,0x75,0x73,0x68, +0x28,0x76,0x61,0x72,0x20,0x41,0x72,0x72, +0x3a,0x61,0x72,0x72,0x61,0x79,0x3c,0x61, +0x75,0x74,0x6f,0x28,0x6e,0x75,0x6d,0x54, +0x29,0x5b,0x5d,0x3e,0x3b,0x20,0x76,0x61, +0x72,0x20,0x76,0x61,0x72,0x72,0x3a,0x6e, +0x75,0x6d,0x54,0x5b,0x5d,0x2d,0x23,0x20, +0x3d,0x3d,0x63,0x6f,0x6e,0x73,0x74,0x29, +0x0a, 0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, 0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, 0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x63, @@ -1131,13 +1308,19 @@ static unsigned char builtin_das[] = { 0x65,0x20,0x6d,0x6f,0x76,0x65,0x64,0x22, 0x29,0x0a, 0x0a, +0x5b,0x75,0x6e,0x75,0x73,0x65,0x64,0x5f, +0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74, +0x28,0x41,0x72,0x72,0x2c,0x20,0x76,0x61, +0x6c,0x75,0x65,0x2c,0x20,0x61,0x74,0x29, +0x5d,0x0a, 0x64,0x65,0x66,0x20,0x70,0x75,0x73,0x68, 0x5f,0x63,0x6c,0x6f,0x6e,0x65,0x28,0x76, 0x61,0x72,0x20,0x41,0x72,0x72,0x3a,0x61, 0x72,0x72,0x61,0x79,0x3c,0x61,0x75,0x74, 0x6f,0x28,0x6e,0x75,0x6d,0x54,0x29,0x3e, 0x3b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x6e, -0x75,0x6d,0x54,0x7c,0x23,0x3b,0x61,0x74, +0x75,0x6d,0x54,0x20,0x3d,0x3d,0x63,0x6f, +0x6e,0x73,0x74,0x7c,0x23,0x3b,0x61,0x74, 0x3a,0x69,0x6e,0x74,0x29,0x0a, 0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, 0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, @@ -1157,6 +1340,83 @@ static unsigned char builtin_das[] = { 0x69,0x66,0x79,0x5f,0x6c,0x6f,0x63,0x6b, 0x73,0x28,0x41,0x72,0x72,0x29,0x0a, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x69, +0x66,0x20,0x74,0x79,0x70,0x65,0x69,0x6e, +0x66,0x6f,0x28,0x63,0x61,0x6e,0x5f,0x63, +0x6c,0x6f,0x6e,0x65,0x5f,0x66,0x72,0x6f, +0x6d,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x20, +0x76,0x61,0x6c,0x75,0x65,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x41,0x72,0x72,0x5b, +0x5f,0x5f,0x62,0x75,0x69,0x6c,0x74,0x69, +0x6e,0x5f,0x61,0x72,0x72,0x61,0x79,0x5f, +0x70,0x75,0x73,0x68,0x5f,0x7a,0x65,0x72, +0x6f,0x28,0x41,0x72,0x72,0x2c,0x61,0x74, +0x2c,0x74,0x79,0x70,0x65,0x69,0x6e,0x66, +0x6f,0x28,0x73,0x69,0x7a,0x65,0x6f,0x66, +0x20,0x41,0x72,0x72,0x5b,0x30,0x5d,0x29, +0x29,0x5d,0x20,0x3a,0x3d,0x20,0x76,0x61, +0x6c,0x75,0x65,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x65,0x6c,0x73,0x65,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x63, +0x65,0x70,0x74,0x5f,0x61,0x73,0x73,0x65, +0x72,0x74,0x28,0x66,0x61,0x6c,0x73,0x65, +0x2c,0x22,0x63,0x61,0x6e,0x27,0x74,0x20, +0x70,0x75,0x73,0x68,0x2d,0x63,0x6c,0x6f, +0x6e,0x65,0x20,0x76,0x61,0x6c,0x75,0x65, +0x2c,0x20,0x77,0x68,0x69,0x63,0x68,0x20, +0x63,0x61,0x6e,0x27,0x74,0x20,0x62,0x65, +0x20,0x63,0x6c,0x6f,0x6e,0x65,0x64,0x20, +0x66,0x72,0x6f,0x6d,0x20,0x63,0x6f,0x6e, +0x73,0x74,0x22,0x29,0x0a, +0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x63,0x6f,0x6e,0x63,0x65,0x70,0x74,0x5f, +0x61,0x73,0x73,0x65,0x72,0x74,0x28,0x66, +0x61,0x6c,0x73,0x65,0x2c,0x22,0x63,0x61, +0x6e,0x27,0x74,0x20,0x70,0x75,0x73,0x68, +0x2d,0x63,0x6c,0x6f,0x6e,0x65,0x20,0x76, +0x61,0x6c,0x75,0x65,0x2c,0x20,0x77,0x68, +0x69,0x63,0x68,0x20,0x63,0x61,0x6e,0x27, +0x74,0x20,0x62,0x65,0x20,0x63,0x6c,0x6f, +0x6e,0x65,0x64,0x22,0x29,0x0a, +0x0a, +0x5b,0x75,0x6e,0x75,0x73,0x65,0x64,0x5f, +0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74, +0x28,0x41,0x72,0x72,0x2c,0x20,0x76,0x61, +0x6c,0x75,0x65,0x2c,0x20,0x61,0x74,0x29, +0x5d,0x0a, +0x64,0x65,0x66,0x20,0x70,0x75,0x73,0x68, +0x5f,0x63,0x6c,0x6f,0x6e,0x65,0x28,0x76, +0x61,0x72,0x20,0x41,0x72,0x72,0x3a,0x61, +0x72,0x72,0x61,0x79,0x3c,0x61,0x75,0x74, +0x6f,0x28,0x6e,0x75,0x6d,0x54,0x29,0x3e, +0x3b,0x76,0x61,0x72,0x20,0x76,0x61,0x6c, +0x75,0x65,0x3a,0x6e,0x75,0x6d,0x54,0x20, +0x3d,0x3d,0x63,0x6f,0x6e,0x73,0x74,0x7c, +0x23,0x3b,0x61,0x74,0x3a,0x69,0x6e,0x74, +0x29,0x0a, +0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, +0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, +0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x63, +0x61,0x6e,0x5f,0x63,0x6c,0x6f,0x6e,0x65, +0x20,0x76,0x61,0x6c,0x75,0x65,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x69, +0x66,0x20,0x74,0x79,0x70,0x65,0x69,0x6e, +0x66,0x6f,0x28,0x6e,0x65,0x65,0x64,0x5f, +0x6c,0x6f,0x63,0x6b,0x5f,0x63,0x68,0x65, +0x63,0x6b,0x20,0x74,0x79,0x70,0x65,0x3c, +0x6e,0x75,0x6d,0x54,0x3e,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x5f,0x62,0x75,0x69, +0x6c,0x74,0x69,0x6e,0x5f,0x76,0x65,0x72, +0x69,0x66,0x79,0x5f,0x6c,0x6f,0x63,0x6b, +0x73,0x28,0x41,0x72,0x72,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x41,0x72,0x72,0x5b,0x5f,0x5f,0x62,0x75, 0x69,0x6c,0x74,0x69,0x6e,0x5f,0x61,0x72, 0x72,0x61,0x79,0x5f,0x70,0x75,0x73,0x68, @@ -1179,13 +1439,18 @@ static unsigned char builtin_das[] = { 0x74,0x20,0x62,0x65,0x20,0x63,0x6c,0x6f, 0x6e,0x65,0x64,0x22,0x29,0x0a, 0x0a, +0x5b,0x75,0x6e,0x75,0x73,0x65,0x64,0x5f, +0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74, +0x28,0x41,0x72,0x72,0x2c,0x20,0x76,0x61, +0x6c,0x75,0x65,0x29,0x5d,0x0a, 0x64,0x65,0x66,0x20,0x70,0x75,0x73,0x68, 0x5f,0x63,0x6c,0x6f,0x6e,0x65,0x28,0x76, 0x61,0x72,0x20,0x41,0x72,0x72,0x3a,0x61, 0x72,0x72,0x61,0x79,0x3c,0x61,0x75,0x74, 0x6f,0x28,0x6e,0x75,0x6d,0x54,0x29,0x3e, 0x3b,0x76,0x61,0x6c,0x75,0x65,0x3a,0x6e, -0x75,0x6d,0x54,0x7c,0x23,0x29,0x0a, +0x75,0x6d,0x54,0x20,0x3d,0x3d,0x63,0x6f, +0x6e,0x73,0x74,0x7c,0x23,0x29,0x0a, 0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, 0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, 0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x63, @@ -1248,13 +1513,153 @@ static unsigned char builtin_das[] = { 0x74,0x20,0x62,0x65,0x20,0x63,0x6c,0x6f, 0x6e,0x65,0x64,0x22,0x29,0x0a, 0x0a, +0x5b,0x75,0x6e,0x75,0x73,0x65,0x64,0x5f, +0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74, +0x28,0x41,0x72,0x72,0x2c,0x20,0x76,0x61, +0x6c,0x75,0x65,0x29,0x5d,0x0a, +0x64,0x65,0x66,0x20,0x70,0x75,0x73,0x68, +0x5f,0x63,0x6c,0x6f,0x6e,0x65,0x28,0x76, +0x61,0x72,0x20,0x41,0x72,0x72,0x3a,0x61, +0x72,0x72,0x61,0x79,0x3c,0x61,0x75,0x74, +0x6f,0x28,0x6e,0x75,0x6d,0x54,0x29,0x3e, +0x3b,0x76,0x61,0x72,0x20,0x76,0x61,0x6c, +0x75,0x65,0x3a,0x6e,0x75,0x6d,0x54,0x20, +0x3d,0x3d,0x63,0x6f,0x6e,0x73,0x74,0x7c, +0x23,0x29,0x0a, +0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, +0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, +0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x63, +0x61,0x6e,0x5f,0x63,0x6c,0x6f,0x6e,0x65, +0x20,0x76,0x61,0x6c,0x75,0x65,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x69, +0x66,0x20,0x74,0x79,0x70,0x65,0x69,0x6e, +0x66,0x6f,0x28,0x6e,0x65,0x65,0x64,0x5f, +0x6c,0x6f,0x63,0x6b,0x5f,0x63,0x68,0x65, +0x63,0x6b,0x20,0x74,0x79,0x70,0x65,0x3c, +0x6e,0x75,0x6d,0x54,0x3e,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x5f,0x62,0x75,0x69, +0x6c,0x74,0x69,0x6e,0x5f,0x76,0x65,0x72, +0x69,0x66,0x79,0x5f,0x6c,0x6f,0x63,0x6b, +0x73,0x28,0x41,0x72,0x72,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x41,0x72,0x72,0x5b,0x5f,0x5f,0x62,0x75, +0x69,0x6c,0x74,0x69,0x6e,0x5f,0x61,0x72, +0x72,0x61,0x79,0x5f,0x70,0x75,0x73,0x68, +0x5f,0x62,0x61,0x63,0x6b,0x5f,0x7a,0x65, +0x72,0x6f,0x28,0x41,0x72,0x72,0x2c,0x74, +0x79,0x70,0x65,0x69,0x6e,0x66,0x6f,0x28, +0x73,0x69,0x7a,0x65,0x6f,0x66,0x20,0x41, +0x72,0x72,0x5b,0x30,0x5d,0x29,0x29,0x5d, +0x20,0x3a,0x3d,0x20,0x76,0x61,0x6c,0x75, +0x65,0x0a, +0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x63,0x6f,0x6e,0x63,0x65,0x70,0x74,0x5f, +0x61,0x73,0x73,0x65,0x72,0x74,0x28,0x66, +0x61,0x6c,0x73,0x65,0x2c,0x22,0x63,0x61, +0x6e,0x27,0x74,0x20,0x70,0x75,0x73,0x68, +0x2d,0x63,0x6c,0x6f,0x6e,0x65,0x20,0x76, +0x61,0x6c,0x75,0x65,0x2c,0x20,0x77,0x68, +0x69,0x63,0x68,0x20,0x63,0x61,0x6e,0x27, +0x74,0x20,0x62,0x65,0x20,0x63,0x6c,0x6f, +0x6e,0x65,0x64,0x22,0x29,0x0a, +0x0a, +0x5b,0x75,0x6e,0x75,0x73,0x65,0x64,0x5f, +0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74, +0x28,0x41,0x72,0x72,0x2c,0x20,0x76,0x61, +0x6c,0x75,0x65,0x29,0x5d,0x0a, 0x64,0x65,0x66,0x20,0x70,0x75,0x73,0x68, 0x5f,0x63,0x6c,0x6f,0x6e,0x65,0x28,0x76, 0x61,0x72,0x20,0x41,0x72,0x72,0x3a,0x61, 0x72,0x72,0x61,0x79,0x3c,0x61,0x75,0x74, 0x6f,0x28,0x6e,0x75,0x6d,0x54,0x29,0x3e, 0x3b,0x20,0x76,0x61,0x72,0x72,0x3a,0x6e, -0x75,0x6d,0x54,0x5b,0x5d,0x29,0x0a, +0x75,0x6d,0x54,0x5b,0x5d,0x20,0x3d,0x3d, +0x63,0x6f,0x6e,0x73,0x74,0x29,0x0a, +0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, +0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, +0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x63, +0x61,0x6e,0x5f,0x63,0x6c,0x6f,0x6e,0x65, +0x20,0x74,0x79,0x70,0x65,0x3c,0x6e,0x75, +0x6d,0x54,0x3e,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x69, +0x66,0x20,0x74,0x79,0x70,0x65,0x69,0x6e, +0x66,0x6f,0x28,0x6e,0x65,0x65,0x64,0x5f, +0x6c,0x6f,0x63,0x6b,0x5f,0x63,0x68,0x65, +0x63,0x6b,0x20,0x74,0x79,0x70,0x65,0x3c, +0x6e,0x75,0x6d,0x54,0x3e,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x5f,0x62,0x75,0x69, +0x6c,0x74,0x69,0x6e,0x5f,0x76,0x65,0x72, +0x69,0x66,0x79,0x5f,0x6c,0x6f,0x63,0x6b, +0x73,0x28,0x41,0x72,0x72,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x69, +0x66,0x20,0x74,0x79,0x70,0x65,0x69,0x6e, +0x66,0x6f,0x28,0x63,0x61,0x6e,0x5f,0x63, +0x6c,0x6f,0x6e,0x65,0x5f,0x66,0x72,0x6f, +0x6d,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x20, +0x76,0x61,0x72,0x72,0x5b,0x30,0x5d,0x29, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20, +0x74,0x20,0x69,0x6e,0x20,0x76,0x61,0x72, +0x72,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x41,0x72,0x72,0x5b,0x5f,0x5f,0x62,0x75, +0x69,0x6c,0x74,0x69,0x6e,0x5f,0x61,0x72, +0x72,0x61,0x79,0x5f,0x70,0x75,0x73,0x68, +0x5f,0x62,0x61,0x63,0x6b,0x28,0x41,0x72, +0x72,0x2c,0x74,0x79,0x70,0x65,0x69,0x6e, +0x66,0x6f,0x28,0x73,0x69,0x7a,0x65,0x6f, +0x66,0x20,0x41,0x72,0x72,0x5b,0x30,0x5d, +0x29,0x29,0x5d,0x20,0x3a,0x3d,0x20,0x74, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x65,0x6c,0x73,0x65,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x63, +0x65,0x70,0x74,0x5f,0x61,0x73,0x73,0x65, +0x72,0x74,0x28,0x66,0x61,0x6c,0x73,0x65, +0x2c,0x22,0x63,0x61,0x6e,0x27,0x74,0x20, +0x70,0x75,0x73,0x68,0x2d,0x63,0x6c,0x6f, +0x6e,0x65,0x20,0x76,0x61,0x6c,0x75,0x65, +0x2c,0x20,0x77,0x68,0x69,0x63,0x68,0x20, +0x63,0x61,0x6e,0x27,0x74,0x20,0x62,0x65, +0x20,0x63,0x6c,0x6f,0x6e,0x65,0x64,0x20, +0x66,0x72,0x6f,0x6d,0x20,0x63,0x6f,0x6e, +0x73,0x74,0x22,0x29,0x0a, +0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x63,0x6f,0x6e,0x63,0x65,0x70,0x74,0x5f, +0x61,0x73,0x73,0x65,0x72,0x74,0x28,0x66, +0x61,0x6c,0x73,0x65,0x2c,0x22,0x63,0x61, +0x6e,0x27,0x74,0x20,0x70,0x75,0x73,0x68, +0x5f,0x63,0x6c,0x6f,0x6e,0x65,0x20,0x76, +0x61,0x6c,0x75,0x65,0x2c,0x20,0x77,0x68, +0x69,0x63,0x68,0x20,0x63,0x61,0x6e,0x27, +0x74,0x20,0x62,0x65,0x20,0x63,0x6c,0x6f, +0x6e,0x65,0x64,0x22,0x29,0x0a, +0x0a, +0x5b,0x75,0x6e,0x75,0x73,0x65,0x64,0x5f, +0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74, +0x28,0x41,0x72,0x72,0x2c,0x20,0x76,0x61, +0x6c,0x75,0x65,0x29,0x5d,0x0a, +0x64,0x65,0x66,0x20,0x70,0x75,0x73,0x68, +0x5f,0x63,0x6c,0x6f,0x6e,0x65,0x28,0x76, +0x61,0x72,0x20,0x41,0x72,0x72,0x3a,0x61, +0x72,0x72,0x61,0x79,0x3c,0x61,0x75,0x74, +0x6f,0x28,0x6e,0x75,0x6d,0x54,0x29,0x3e, +0x3b,0x20,0x76,0x61,0x72,0x20,0x76,0x61, +0x72,0x72,0x3a,0x6e,0x75,0x6d,0x54,0x5b, +0x5d,0x20,0x3d,0x3d,0x63,0x6f,0x6e,0x73, +0x74,0x29,0x0a, 0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, 0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, 0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x63, @@ -1299,13 +1704,18 @@ static unsigned char builtin_das[] = { 0x74,0x20,0x62,0x65,0x20,0x63,0x6c,0x6f, 0x6e,0x65,0x64,0x22,0x29,0x0a, 0x0a, +0x5b,0x75,0x6e,0x75,0x73,0x65,0x64,0x5f, +0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74, +0x28,0x41,0x72,0x72,0x2c,0x20,0x76,0x61, +0x6c,0x75,0x65,0x29,0x5d,0x0a, 0x64,0x65,0x66,0x20,0x70,0x75,0x73,0x68, 0x5f,0x63,0x6c,0x6f,0x6e,0x65,0x28,0x76, 0x61,0x72,0x20,0x41,0x72,0x72,0x3a,0x61, 0x72,0x72,0x61,0x79,0x3c,0x61,0x75,0x74, 0x6f,0x28,0x6e,0x75,0x6d,0x54,0x29,0x5b, 0x5d,0x3e,0x3b,0x20,0x76,0x61,0x72,0x72, -0x3a,0x6e,0x75,0x6d,0x54,0x5b,0x5d,0x29, +0x3a,0x6e,0x75,0x6d,0x54,0x5b,0x5d,0x20, +0x3d,0x3d,0x63,0x6f,0x6e,0x73,0x74,0x29, 0x0a, 0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, 0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, @@ -1337,6 +1747,109 @@ static unsigned char builtin_das[] = { 0x6c,0x6f,0x63,0x6b,0x73,0x28,0x41,0x72, 0x72,0x29,0x0a, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x74, +0x79,0x70,0x65,0x69,0x6e,0x66,0x6f,0x28, +0x63,0x61,0x6e,0x5f,0x63,0x6c,0x6f,0x6e, +0x65,0x5f,0x66,0x72,0x6f,0x6d,0x5f,0x63, +0x6f,0x6e,0x73,0x74,0x20,0x76,0x61,0x72, +0x72,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x66,0x6f,0x72,0x20,0x74,0x20,0x69,0x6e, +0x20,0x76,0x61,0x72,0x72,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x41,0x72,0x72,0x5b, +0x5f,0x5f,0x62,0x75,0x69,0x6c,0x74,0x69, +0x6e,0x5f,0x61,0x72,0x72,0x61,0x79,0x5f, +0x70,0x75,0x73,0x68,0x5f,0x62,0x61,0x63, +0x6b,0x28,0x41,0x72,0x72,0x2c,0x74,0x79, +0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x73, +0x69,0x7a,0x65,0x6f,0x66,0x20,0x41,0x72, +0x72,0x5b,0x30,0x5d,0x29,0x29,0x5d,0x20, +0x3a,0x3d,0x20,0x74,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x63,0x6f,0x6e,0x63,0x65,0x70,0x74,0x5f, +0x61,0x73,0x73,0x65,0x72,0x74,0x28,0x66, +0x61,0x6c,0x73,0x65,0x2c,0x22,0x63,0x61, +0x6e,0x27,0x74,0x20,0x70,0x75,0x73,0x68, +0x2d,0x63,0x6c,0x6f,0x6e,0x65,0x20,0x76, +0x61,0x6c,0x75,0x65,0x2c,0x20,0x77,0x68, +0x69,0x63,0x68,0x20,0x63,0x61,0x6e,0x27, +0x74,0x20,0x62,0x65,0x20,0x63,0x6c,0x6f, +0x6e,0x65,0x64,0x20,0x66,0x72,0x6f,0x6d, +0x20,0x63,0x6f,0x6e,0x73,0x74,0x22,0x29, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x65,0x6c,0x73,0x65,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x63, +0x65,0x70,0x74,0x5f,0x61,0x73,0x73,0x65, +0x72,0x74,0x28,0x66,0x61,0x6c,0x73,0x65, +0x2c,0x22,0x63,0x61,0x6e,0x27,0x74,0x20, +0x70,0x75,0x73,0x68,0x5f,0x63,0x6c,0x6f, +0x6e,0x65,0x20,0x61,0x72,0x72,0x61,0x79, +0x20,0x6f,0x66,0x20,0x64,0x69,0x66,0x66, +0x65,0x72,0x65,0x6e,0x74,0x20,0x73,0x69, +0x7a,0x65,0x22,0x29,0x0a, +0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x63,0x6f,0x6e,0x63,0x65,0x70,0x74,0x5f, +0x61,0x73,0x73,0x65,0x72,0x74,0x28,0x66, +0x61,0x6c,0x73,0x65,0x2c,0x22,0x63,0x61, +0x6e,0x27,0x74,0x20,0x70,0x75,0x73,0x68, +0x20,0x76,0x61,0x6c,0x75,0x65,0x2c,0x20, +0x77,0x68,0x69,0x63,0x68,0x20,0x63,0x61, +0x6e,0x27,0x74,0x20,0x62,0x65,0x20,0x63, +0x6c,0x6f,0x6e,0x65,0x64,0x22,0x29,0x0a, +0x0a, +0x5b,0x75,0x6e,0x75,0x73,0x65,0x64,0x5f, +0x61,0x72,0x67,0x75,0x6d,0x65,0x6e,0x74, +0x28,0x41,0x72,0x72,0x2c,0x20,0x76,0x61, +0x6c,0x75,0x65,0x29,0x5d,0x0a, +0x64,0x65,0x66,0x20,0x70,0x75,0x73,0x68, +0x5f,0x63,0x6c,0x6f,0x6e,0x65,0x28,0x76, +0x61,0x72,0x20,0x41,0x72,0x72,0x3a,0x61, +0x72,0x72,0x61,0x79,0x3c,0x61,0x75,0x74, +0x6f,0x28,0x6e,0x75,0x6d,0x54,0x29,0x5b, +0x5d,0x3e,0x3b,0x20,0x76,0x61,0x72,0x20, +0x76,0x61,0x72,0x72,0x3a,0x6e,0x75,0x6d, +0x54,0x5b,0x5d,0x29,0x0a, +0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, +0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, +0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x63, +0x61,0x6e,0x5f,0x63,0x6f,0x70,0x79,0x20, +0x74,0x79,0x70,0x65,0x3c,0x6e,0x75,0x6d, +0x54,0x3e,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x69, +0x66,0x20,0x74,0x79,0x70,0x65,0x69,0x6e, +0x66,0x6f,0x28,0x73,0x69,0x7a,0x65,0x6f, +0x66,0x20,0x41,0x72,0x72,0x5b,0x30,0x5d, +0x29,0x3d,0x3d,0x74,0x79,0x70,0x65,0x69, +0x6e,0x66,0x6f,0x28,0x73,0x69,0x7a,0x65, +0x6f,0x66,0x20,0x76,0x61,0x72,0x72,0x29, +0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74, +0x69,0x63,0x5f,0x69,0x66,0x20,0x74,0x79, +0x70,0x65,0x69,0x6e,0x66,0x6f,0x28,0x6e, +0x65,0x65,0x64,0x5f,0x6c,0x6f,0x63,0x6b, +0x5f,0x63,0x68,0x65,0x63,0x6b,0x20,0x74, +0x79,0x70,0x65,0x3c,0x6e,0x75,0x6d,0x54, +0x3e,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x5f,0x62,0x75,0x69,0x6c,0x74,0x69,0x6e, +0x5f,0x76,0x65,0x72,0x69,0x66,0x79,0x5f, +0x6c,0x6f,0x63,0x6b,0x73,0x28,0x41,0x72, +0x72,0x29,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x41,0x72,0x72,0x5b, 0x5f,0x5f,0x62,0x75,0x69,0x6c,0x74,0x69, 0x6e,0x5f,0x61,0x72,0x72,0x61,0x79,0x5f,