From f64265e7fbc483f1895eb3297c81f045822af45c Mon Sep 17 00:00:00 2001 From: Yuval Adam <_@yuv.al> Date: Wed, 28 Apr 2021 11:04:48 +0300 Subject: [PATCH] Convert lists to tuples to make dict keys hashable, fixes #24 --- tests/samples/unhashablelist.sample | 1 + tests/test_utils.py | 12 ++++++++++++ viewstate/parse.py | 7 ++++++- viewstate/utils.py | 5 +++++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/samples/unhashablelist.sample create mode 100644 tests/test_utils.py create mode 100644 viewstate/utils.py diff --git a/tests/samples/unhashablelist.sample b/tests/samples/unhashablelist.sample new file mode 100644 index 0000000..cb64125 --- /dev/null +++ b/tests/samples/unhashablelist.sample @@ -0,0 +1 @@ +/wEPDwUKMTIwOTg5ODY3OGQYpgEFigFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDIkdWNHcm91cCRsdkV4cGlyYXRpb25zJGN0cmwzJHVjRXhwaXJhdGlvblRyaWdnZXIPFCsAAmQC/////w9kBW5jdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJHVjVHJpZ2dlcg8UKwACZAL/////D2QFigFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDAkdWNHcm91cCRsdkV4cGlyYXRpb25zJGN0cmwyJHVjRXhwaXJhdGlvblRyaWdnZXIPFCsAAmQC/////w9kBVljdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNUd2VldA8UKwACZAL/////D2QFdmN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZHR0NNJGN0cmwwJGx2Q00PFCsADmRkZGRkZGQ8KwAHAAIHZGRkZgL/////D2QFhgFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDAkdWNHcm91cCRsdkV4cGlyYXRpb25zJGN0cmwwJHVjRnV0dXJlVHJpZ2dlcg8UKwACZAL/////D2QFEGN0bDAwJHVjUG9wdXBUaXAPFCsAAmQC/////w9kBRZjdGwwMCR1Y1F1aWtUb29scyR1Y1FTDxQrAAJkAv////8PZAWKAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMSR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDEkdWNFeHBpcmF0aW9uVHJpZ2dlcg8UKwACZAL/////D2QFWmN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cG9ydA8UKwACZAL/////D2QFhQFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzMiRjdHJsMyRsdkV4cGlyYXRpb25zDxQrAA5kZGRkZGRkPCsABAACBGRkZGYC/////w9kBYYBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwwJHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsMiR1Y0Z1dHVyZVRyaWdnZXIPFCsAAmQC/////w9kBWtjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNUZXJtQ2hhcnRTZXR0aW5ncyRjdGwwMA8UKwACZAL/////D2QFF2N0bDAwJHVjQ29tcGFyZUVkaXRpb25zDxQrAAJkAv////8PZAVXY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNQb3B1cFRhYnMkdWNUcmlnZ2VyDxQrAAJkAv////8PZAVhY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJExhbmRpbmdEZWZhdWx0MQ8UKwACZAL/////D2QFhQFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzMiRjdHJsMCRsdkV4cGlyYXRpb25zDxQrAA5kZGRkZGRkPCsACAACCGRkZGYC/////w9kBYYBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmw0JHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsMiR1Y0Z1dHVyZVRyaWdnZXIPFCsAAmQC/////w9kBSVjdGwwMCR1Y1NlbGVjdG9yJGx2R3JvdXBzJGN0cmwwJGN0bDAwDxQrAAJkAv////8PZAUiY3RsMDAkdWNNYWluTmF2UmliYm9uJHVjUXVpa1NoZWV0cw8UKwACZAL/////D2QFhgFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDMkdWNHcm91cCRsdkV4cGlyYXRpb25zJGN0cmwwJHVjRnV0dXJlVHJpZ2dlcg8UKwACZAL/////D2QFhgFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDEkdWNHcm91cCRsdkV4cGlyYXRpb25zJGN0cmwwJHVjRnV0dXJlVHJpZ2dlcg8UKwACZAL/////D2QFEGN0bDAwJHVjSXRlcmF0b3IPFCsAAmQC/////w9kBSVjdGwwMCR1Y1NlbGVjdG9yJGx2R3JvdXBzJGN0cmw0JGN0bDAwDxQrAAJkAv////8PZAWGAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMCR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDckdWNGdXR1cmVUcmlnZ2VyDxQrAAJkAv////8PZAUSY3RsMDAkY2xvY2tOZXdZb3JrDxQrAAJkApD+//8PZAUlY3RsMDAkdWNTZWxlY3RvciRsdkdyb3VwcyRjdHJsMyRjdGwwMA8UKwACZAL/////D2QFa2N0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZHR0NNDxQrAA5kZGRkZGRkFCsAAWQCAWRkZGYC/////w9kBWJjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDIkdWNHcm91cA8UKwACZAL/////D2QFDmN0bDAwJHVjTm90aWNlDxQrAAJkAv////8PZAVeY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjVmlld1BpY2tlcg8UKwACZAL/////D2QFigFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDMkdWNHcm91cCRsdkV4cGlyYXRpb25zJGN0cmwxJHVjRXhwaXJhdGlvblRyaWdnZXIPFCsAAmQC/////w9kBTNjdGwwMCR1Y1NlbGVjdG9yJGx2R3JvdXBzJGN0cmwxJGN0bDAwJGx2RXhwaXJhdGlvbnMPFCsADmRkZGRkZGQ8KwAEAAIEZGRkZgL/////D2QFYmN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsNCR1Y0dyb3VwDxQrAAJkAv////8PZAWGAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMyR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDIkdWNGdXR1cmVUcmlnZ2VyDxQrAAJkAv////8PZAWKAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsNCR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDIkdWNFeHBpcmF0aW9uVHJpZ2dlcg8UKwACZAL/////D2QFM2N0bDAwJHVjU2VsZWN0b3IkbHZHcm91cHMkY3RybDAkY3RsMDAkbHZFeHBpcmF0aW9ucw8UKwAOZGRkZGRkZDwrAAgAAghkZGRmAv////8PZAWKAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMiR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDAkdWNFeHBpcmF0aW9uVHJpZ2dlcg8UKwACZAL/////D2QFhQFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzMiRjdHJsMiRsdkV4cGlyYXRpb25zDxQrAA5kZGRkZGRkPCsABAACBGRkZGYC/////w9kBSdjdGwwMCR1Y1F1aWtUb29scyR1Y1FTJHVjQ29udGFjdFN1cHBvcnQPFCsAAmQC/////w9kBYoBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwwJHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsNCR1Y0V4cGlyYXRpb25UcmlnZ2VyDxQrAAJkAv////8PZAWGAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMyR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDEkdWNGdXR1cmVUcmlnZ2VyDxQrAAJkAv////8PZAURY3RsMDAkY2xvY2tMb25kb24PFCsAAmQCPGQFigFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDMkdWNHcm91cCRsdkV4cGlyYXRpb25zJGN0cmwyJHVjRXhwaXJhdGlvblRyaWdnZXIPFCsAAmQC/////w9kBV1jdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0ludGVncmF0ZWRWT0lQaWNrZXIkdmlldzIPFCsAAmQC/////w9kBUtjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQPFCsAAmQC/////w9kBXBjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzDxQrAA5kZGRkZGRkPCsABQACBWRkZGYC/////w9kBV1jdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0ludGVncmF0ZWRWT0lQaWNrZXIkdmlldzMPFCsAAmQC/////w9kBRFjdGwwMCR1Y1F1aWtUb29scw8UKwACZAL/////D2QFUWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlcg8UKwACZAL/////D2QFcGN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMyR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMPFCsADmRkZGRkZGQUKwADZGRkAgNkZGRmAv////8PZAVtY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjU2hvcnRjdXQkdWNTaG9ydGN1dEFkZE5ldw8UKwACZAL/////D2QFJWN0bDAwJHVjTWFpbk5hdlJpYmJvbiR1Y1NlY3Rpb25QaWNrZXIPFCsAAmQC/////w9kBQxjdGwwMCR1Y0NhcnQPFCsAAmQC/////w9kBU1jdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y1BvcHVwVGFicw8UKwACZAL/////D2QFhgFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDIkdWNHcm91cCRsdkV4cGlyYXRpb25zJGN0cmwxJHVjRnV0dXJlVHJpZ2dlcg8UKwACZAL/////D2QFEGN0bDAwJHVjUXVpa01lbnUPFCsAAmQC/////w9kBYoBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwwJHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsNyR1Y0V4cGlyYXRpb25UcmlnZ2VyDxQrAAJkAv////8PZAViY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwwJHVjR3JvdXAPFCsAAmQC/////w9kBShjdGwwMCR1Y01haW5OYXZSaWJib24kdWNRdWlja1ByZWZlcmVuY2VzDxQrAAJkAv////8PZAUPY3RsMDAkdWNGdXR1cmVzDxQrAAJkAv////8PZAWGAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMCR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDUkdWNGdXR1cmVUcmlnZ2VyDxQrAAJkAv////8PZAUlY3RsMDAkdWNTZWxlY3RvciRsdkdyb3VwcyRjdHJsMiRjdGwwMA8UKwACZAL/////D2QFamN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y1ZpZXdQaWNrZXIkUGlja2VyVmlldzcPFCsAAmQC/////w9kBQ1jdGwwMCR1Y0NhbGMyDxQrAAJkAv////8PZAUNY3RsMDAkRm9vdGVyMQ8UKwACZAL/////D2QFGWN0bDAwJHVjTWVudUJhciRsdk1lbnVCYXIPFCsADmRkZGRkZGQUKwABZAIBZGRkZgL/////D2QFigFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDAkdWNHcm91cCRsdkV4cGlyYXRpb25zJGN0cmwwJHVjRXhwaXJhdGlvblRyaWdnZXIPFCsAAmQC/////w9kBSVjdGwwMCR1Y1NlbGVjdG9yJGx2R3JvdXBzJGN0cmwxJGN0bDAwDxQrAAJkAv////8PZAViY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwzJHVjR3JvdXAPFCsAAmQC/////w9kBTRjdGwwMCR1Y01lbnVCYXIkbHZNZW51QmFyJGN0cmwwJGN0bDAwJGx2TWVudUNhdGVnb3J5DxQrAA5kZGRkZGRkFCsAAWQCAWRkZGYC/////w9kBRdjdGwwMCR1Y1F1aWtUb29scyRjdGwwMA8UKwACZAL/////D2QFYmN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMSR1Y0dyb3VwDxQrAAJkAv////8PZAUlY3RsMDAkdWNNZW51QmFyJGx2TWVudUJhciRjdHJsMCRjdGwwMA8UKwACZAL/////D2QFEmN0bDAwJGNsb2NrQ2hpY2Fnbw8UKwACZALU/f//D2QFC2N0bDAwJGN0bDA3DxQrAAJkAv////8PZAUzY3RsMDAkdWNTZWxlY3RvciRsdkdyb3VwcyRjdHJsNCRjdGwwMCRsdkV4cGlyYXRpb25zDxQrAA5kZGRkZGRkPCsABAACBGRkZGYC/////w9kBXBjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDIkdWNHcm91cCRsdkV4cGlyYXRpb25zDxQrAA5kZGRkZGRkPCsABAACBGRkZGYC/////w9kBYoBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwxJHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsMCR1Y0V4cGlyYXRpb25UcmlnZ2VyDxQrAAJkAv////8PZAWFAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZQb3BHcm91cHMyJGN0cmw0JGx2RXhwaXJhdGlvbnMPFCsADmRkZGRkZGQ8KwAEAAIEZGRkZgL/////D2QFE2N0bDAwJHVjUG9wdXBTdGF0dXMPFCsAAmQC/////w9kBXFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzMg8UKwAOZGRkZGRkZDwrAAUAAgVkZGRmAv////8PZAUfY3RsMDAkdWNNYWluTmF2UmliYm9uJHVjUXVpa0VkdQ8UKwACZAL/////D2QFigFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDQkdWNHcm91cCRsdkV4cGlyYXRpb25zJGN0cmwzJHVjRXhwaXJhdGlvblRyaWdnZXIPFCsAAmQC/////w9kBRFjdGwwMCRjdGwwNiRjdGwwMA8UKwACZAL/////D2QFK2N0bDAwJGN0bDA2JHVjUHJvZHVjdFNlbGVjdG9yUG9wdXAkbHZHcm91cHMPFCsADmRkZGRkZGQ8KwAJAAIJZGRkZgL/////D2QFZGN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y1ZpZXdQaWNrZXIkdmlldzEPFCsAAmQC/////w9kBYYBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwwJHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsNCR1Y0Z1dHVyZVRyaWdnZXIPFCsAAmQC/////w9kBTNjdGwwMCR1Y1NlbGVjdG9yJGx2R3JvdXBzJGN0cmwzJGN0bDAwJGx2RXhwaXJhdGlvbnMPFCsADmRkZGRkZGQ8KwAEAAIEZGRkZgL/////D2QFZGN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIPFCsABBQrAAJkAv////8PMs0CAAEAAAD/////AQAAAAAAAAAEAQAAAH5TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgcAAAgICAkCAAAAGAAAABkAAAAPAgAAACAAAAAIPmoAAJVrAAAxbQAAlW4AABpwAADAcQAAJXMAAId0AAA6dgAAhncAAMJ4AACGegAA03kAADt6AADYegAAOHsAAEh6AACYegAA9noAAE17AAALegAAVnoAAKl6AAAKewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALMs0BAAEAAAD/////AQAAAAAAAAAEAQAAAH5TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgcAAAgICAkCAAAAAAAAAAAAAAAPAgAAAAAAAAAICzLDAgABAAAA/////wEAAAAAAAAABAEAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBgAACAgJAgAAAAoAAAAKAAAAEQIAAAAQAAAABgMAAAAGRVVVXzA3BgQAAAAGRVVVXzE0BgUAAAAGRVVVXzMwBgYAAAAGRVVVXzYwBgcAAAAGRVVVXzkwBggAAAAGRVVVMTgwBgkAAAAGRVVVMzYwBgoAAAAFRVVVITEGCwAAAAVFVVUhMgYMAAAABUVVVSEzDQYLZAWGAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsNCR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDEkdWNGdXR1cmVUcmlnZ2VyDxQrAAJkAv////8PZAUQY3RsMDAkY2xvY2tUb2t5bw8UKwACZAKcBGQFXmN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y1ZpZXdQb3BvdXQPFCsAAmQC/////w9kBYYBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwwJHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsNiR1Y0Z1dHVyZVRyaWdnZXIPFCsAAmQC/////w9kBWRjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNWaWV3UGlja2VyJHZpZXcyDxQrAAJkAv////8PZAWKAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMyR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDAkdWNFeHBpcmF0aW9uVHJpZ2dlcg8UKwACZAL/////D2QFigFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDQkdWNHcm91cCRsdkV4cGlyYXRpb25zJGN0cmwwJHVjRXhwaXJhdGlvblRyaWdnZXIPFCsAAmQC/////w9kBYoBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwyJHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsMSR1Y0V4cGlyYXRpb25UcmlnZ2VyDxQrAAJkAv////8PZAWGAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMiR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDMkdWNGdXR1cmVUcmlnZ2VyDxQrAAJkAv////8PZAUzY3RsMDAkY3RsMDYkdWNQcm9kdWN0U2VsZWN0b3JQb3B1cCRsdlByb2R1Y3RzTW9iaWxlDxQrAA5kZGRkZGRkPCsACQACCWRkZGYC/////w9kBQpjdGwwMCR1Y01ODxQrAAJkAv////8PZAUSY3RsMDAkdWNDYWxjdWxhdG9yDxQrAAJkAv////8PZAUZY3RsMDAkdWNTZWxlY3RvciRsdkdyb3Vwcw8UKwAOZGRkZGRkZDwrAAUAAgVkZGRmAv////8PZAVcY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjUXVpa01lbnUPFCsAAmQC/////w9kBTBjdGwwMCR1Y01haW5OYXZSaWJib24kdWNTZWN0aW9uUGlja2VyJGx2U2VjdGlvbnMPFCsADmRkZGRkZGQUKwADZGRkAgNkZGRmAv////8PZAVcY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjU2hvcnRjdXQPFCsAAmQC/////w9kBUxjdGwwMCR1Y01lbnVCYXIkbHZNZW51QmFyJGN0cmwwJGN0bDAwJGx2TWVudUNhdGVnb3J5JGN0cmwwJGN0bDAwJGx2TWVudUdyb3VwDxQrAA5kZGRkZGRkPCsAOAACOGRkZGYC/////w9kBYYBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwxJHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsMSR1Y0Z1dHVyZVRyaWdnZXIPFCsAAmQC/////w9kBSRjdGwwMCR1Y1F1aWtUb29scyR1Y1FTJFN1cHBvcnRQb3B1cDEPFCsAAmQC/////w9kBYoBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwyJHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsMiR1Y0V4cGlyYXRpb25UcmlnZ2VyDxQrAAJkAv////8PZAVUY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzDxQrAA5kZGRkZGRkPCsABQACBWRkZGYC/////w9kBSFjdGwwMCRNYWluQ29udGVudCR1Y1BvcHVwU3BsYXNoZXIPFCsAAmQC/////w9kBYYBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmw0JHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsMCR1Y0Z1dHVyZVRyaWdnZXIPFCsAAmQC/////w9kBXFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzMw8UKwAOZGRkZGRkZDwrAAUAAgVkZGRmAv////8PZAVwY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmw0JHVjR3JvdXAkbHZFeHBpcmF0aW9ucw8UKwAOZGRkZGRkZDwrAAQAAgRkZGRmAv////8PZAVdY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNJbnRlZ3JhdGVkVk9JUGlja2VyJHZpZXcxDxQrAAJkAv////8PZAVvY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjVGVybUNoYXJ0U2V0dGluZ3MkdWNUcmlnZ2VyDxQrAAJkAv////8PZAWKAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMSR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDMkdWNFeHBpcmF0aW9uVHJpZ2dlcg8UKwACZAL/////D2QFE2N0bDAwJHVjSUZyYW1lUG9wdXAPFCsAAmQC/////w9kBYoBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwwJHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsMyR1Y0V4cGlyYXRpb25UcmlnZ2VyDxQrAAJkAv////8PZAULY3RsMDAkY3RsMDYPFCsAAmQC/////w9kBRhjdGwwMCR1Y1BvcHVwQWNjb3VudE1lbnUPFCsAAmQC/////w9kBYYBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwyJHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsMiR1Y0Z1dHVyZVRyaWdnZXIPFCsAAmQC/////w9kBUBjdGwwMCR1Y01lbnVCYXIkbHZNZW51QmFyJGN0cmwwJGN0bDAwJGx2TWVudUNhdGVnb3J5JGN0cmwwJGN0bDAwDxQrAAJkAv////8PZAUWY3RsMDAkY3RsMDYkdWNGYXZvcml0ZQ8UKwACZAL/////D2QFBl9fUGFnZQ8UKwACZDLcBAABAAAA/////wEAAAAAAAAABAEAAADiAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkRpY3Rpb25hcnlgMltbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLk9iamVjdCwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAAB1ZlcnNpb24IQ29tcGFyZXIISGFzaFNpemUAAwAIkgFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5HZW5lcmljRXF1YWxpdHlDb21wYXJlcmAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQgAAAAACQIAAAAAAAAABAIAAACSAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkdlbmVyaWNFcXVhbGl0eUNvbXBhcmVyYDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAAAAAAtkBQ1jdGwwMCRTdHlsZXMxDxQrAAJkAv////8PZAWGAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMiR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDAkdWNGdXR1cmVUcmlnZ2VyDxQrAAJkAv////8PZAWGAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsNCR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDMkdWNGdXR1cmVUcmlnZ2VyDxQrAAJkAv////8PZAUQY3RsMDAkdWNTZWxlY3Rvcg8UKwACZAL/////D2QFigFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDAkdWNHcm91cCRsdkV4cGlyYXRpb25zJGN0cmw1JHVjRXhwaXJhdGlvblRyaWdnZXIPFCsAAmQC/////w9kBRVjdGwwMCR1Y01haW5OYXZSaWJib24PFCsAAmQC/////w9kBWRjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNWaWV3UGlja2VyJHZpZXczDxQrAAJkAv////8PZAWKAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMSR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDIkdWNFeHBpcmF0aW9uVHJpZ2dlcg8UKwACZAL/////D2QFLWN0bDAwJGN0bDA2JHVjUHJvZHVjdFNlbGVjdG9yUG9wdXAkbHZQcm9kdWN0cw8UKwAOZGRkZGRkZDwrAAkAAglkZGRmAv////8PZAWGAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMCR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDMkdWNGdXR1cmVUcmlnZ2VyDxQrAAJkAv////8PZAURY3RsMDAkdWNMZWFybk1vcmUPFCsAAmQC/////w9kBYYBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkJGx2R3JvdXBzJGN0cmwxJHVjR3JvdXAkbHZFeHBpcmF0aW9ucyRjdHJsMyR1Y0Z1dHVyZVRyaWdnZXIPFCsAAmQC/////w9kBRtjdGwwMCR1Y1F1aWtNZW51JGx2UXVpa01lbnUPPCsADgMIZgxmDQL/////D2QFEGN0bDAwJHVjQ2hhcnRUaXAPFCsAAmQC/////w9kBSJjdGwwMCRjdGwwNiR1Y1Byb2R1Y3RTZWxlY3RvclBvcHVwDxQrAAJkAv////8PZAWGAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMCR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDEkdWNGdXR1cmVUcmlnZ2VyDxQrAAJkAv////8PZAWFAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZQb3BHcm91cHMyJGN0cmwxJGx2RXhwaXJhdGlvbnMPFCsADmRkZGRkZGQ8KwAEAAIEZGRkZgL/////D2QFbWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y1ZpZXdQaWNrZXIkdWNWaWV3RHJvcERvd24PFCsAAmQC/////w9kBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WNQU9Y3RsMDAkdWNNYWluTmF2UmliYm9uJHVjUXVpY2tQcmVmZXJlbmNlcyRjYlJldmVyc2VDaGFydENvbG9ycwU0Y3RsMDAkdWNNYWluTmF2UmliYm9uJHVjUXVpY2tQcmVmZXJlbmNlcyRjYkRhcmtUaGVtZQU5Y3RsMDAkdWNNYWluTmF2UmliYm9uJHVjUXVpY2tQcmVmZXJlbmNlcyRjYkZvcmNlTGlnaHRQREZzBTdjdGwwMCR1Y01haW5OYXZSaWJib24kdWNRdWlja1ByZWZlcmVuY2VzJHJiU2hvcnRjdXRNZW51BTdjdGwwMCR1Y01haW5OYXZSaWJib24kdWNRdWlja1ByZWZlcmVuY2VzJHJiU2hvcnRjdXRNZW51BThjdGwwMCR1Y01haW5OYXZSaWJib24kdWNRdWlja1ByZWZlcmVuY2VzJHJiU2hvcnRjdXRQYW5lbAUsY3RsMDAkdWNQb3B1cEFjY291bnRNZW51JGxzTG9naW5TdGF0dXMkY3RsMDEFLGN0bDAwJHVjUG9wdXBBY2NvdW50TWVudSRsc0xvZ2luU3RhdHVzJGN0bDAzBRhjdGwwMCR1Y0l0ZXJhdG9yJGJ0blByZXYFGGN0bDAwJHVjSXRlcmF0b3IkYnRuTmV4dAUZY3RsMDAkY3RsMDckcmVmcmVzaEJ1dHRvbgWYAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZQb3BHcm91cHMyJGN0cmwwJGx2RXhwaXJhdGlvbnMkY3RybDAkY2JFeHBpcmF0aW9uBZgBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjRXhwaXJhdGlvblBpY2tlciRsdlBvcEdyb3VwczIkY3RybDAkbHZFeHBpcmF0aW9ucyRjdHJsMSRjYkV4cGlyYXRpb24FmAFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzMiRjdHJsMCRsdkV4cGlyYXRpb25zJGN0cmwyJGNiRXhwaXJhdGlvbgWYAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZQb3BHcm91cHMyJGN0cmwwJGx2RXhwaXJhdGlvbnMkY3RybDMkY2JFeHBpcmF0aW9uBZgBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjRXhwaXJhdGlvblBpY2tlciRsdlBvcEdyb3VwczIkY3RybDAkbHZFeHBpcmF0aW9ucyRjdHJsNCRjYkV4cGlyYXRpb24FmAFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzMiRjdHJsMCRsdkV4cGlyYXRpb25zJGN0cmw1JGNiRXhwaXJhdGlvbgWYAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZQb3BHcm91cHMyJGN0cmwwJGx2RXhwaXJhdGlvbnMkY3RybDYkY2JFeHBpcmF0aW9uBZgBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjRXhwaXJhdGlvblBpY2tlciRsdlBvcEdyb3VwczIkY3RybDAkbHZFeHBpcmF0aW9ucyRjdHJsNyRjYkV4cGlyYXRpb24FmAFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzMiRjdHJsMSRsdkV4cGlyYXRpb25zJGN0cmwwJGNiRXhwaXJhdGlvbgWYAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZQb3BHcm91cHMyJGN0cmwxJGx2RXhwaXJhdGlvbnMkY3RybDEkY2JFeHBpcmF0aW9uBZgBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjRXhwaXJhdGlvblBpY2tlciRsdlBvcEdyb3VwczIkY3RybDEkbHZFeHBpcmF0aW9ucyRjdHJsMiRjYkV4cGlyYXRpb24FmAFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzMiRjdHJsMSRsdkV4cGlyYXRpb25zJGN0cmwzJGNiRXhwaXJhdGlvbgWYAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZQb3BHcm91cHMyJGN0cmwyJGx2RXhwaXJhdGlvbnMkY3RybDAkY2JFeHBpcmF0aW9uBZgBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjRXhwaXJhdGlvblBpY2tlciRsdlBvcEdyb3VwczIkY3RybDIkbHZFeHBpcmF0aW9ucyRjdHJsMSRjYkV4cGlyYXRpb24FmAFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzMiRjdHJsMiRsdkV4cGlyYXRpb25zJGN0cmwyJGNiRXhwaXJhdGlvbgWYAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZQb3BHcm91cHMyJGN0cmwyJGx2RXhwaXJhdGlvbnMkY3RybDMkY2JFeHBpcmF0aW9uBZgBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjRXhwaXJhdGlvblBpY2tlciRsdlBvcEdyb3VwczIkY3RybDMkbHZFeHBpcmF0aW9ucyRjdHJsMCRjYkV4cGlyYXRpb24FmAFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzMiRjdHJsMyRsdkV4cGlyYXRpb25zJGN0cmwxJGNiRXhwaXJhdGlvbgWYAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZQb3BHcm91cHMyJGN0cmwzJGx2RXhwaXJhdGlvbnMkY3RybDIkY2JFeHBpcmF0aW9uBZgBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjRXhwaXJhdGlvblBpY2tlciRsdlBvcEdyb3VwczIkY3RybDMkbHZFeHBpcmF0aW9ucyRjdHJsMyRjYkV4cGlyYXRpb24FmAFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzMiRjdHJsNCRsdkV4cGlyYXRpb25zJGN0cmwwJGNiRXhwaXJhdGlvbgWYAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZQb3BHcm91cHMyJGN0cmw0JGx2RXhwaXJhdGlvbnMkY3RybDEkY2JFeHBpcmF0aW9uBZgBY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjRXhwaXJhdGlvblBpY2tlciRsdlBvcEdyb3VwczIkY3RybDQkbHZFeHBpcmF0aW9ucyRjdHJsMiRjYkV4cGlyYXRpb24FmAFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2UG9wR3JvdXBzMiRjdHJsNCRsdkV4cGlyYXRpb25zJGN0cmwzJGNiRXhwaXJhdGlvbgWBAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZHR0NNJGN0cmwwJGx2Q00kY3RybDAkY2JDTQWBAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZHR0NNJGN0cmwwJGx2Q00kY3RybDEkY2JDTQWBAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZHR0NNJGN0cmwwJGx2Q00kY3RybDIkY2JDTQWBAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZHR0NNJGN0cmwwJGx2Q00kY3RybDMkY2JDTQWBAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZHR0NNJGN0cmwwJGx2Q00kY3RybDQkY2JDTQWBAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZHR0NNJGN0cmwwJGx2Q00kY3RybDUkY2JDTQWBAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZHR0NNJGN0cmwwJGx2Q00kY3RybDYkY2JDTQV1Y3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjRXhwaXJhdGlvblBpY2tlciRsdkdHQ00kY3RybDAkY2IxBXVjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNFeHBpcmF0aW9uUGlja2VyJGx2R0dDTSRjdHJsMCRjYjIFdWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZHR0NNJGN0cmwwJGNiMwV0Y3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjVGVybUNoYXJ0U2V0dGluZ3MkY2hrU2hvd1BlcmNlbnQFcGN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y1Rlcm1DaGFydFNldHRpbmdzJGNoa1Nob3dBRFYFc2N0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y1Rlcm1DaGFydFNldHRpbmdzJHJhZEdyb3VwT3JkZXIFcWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y1Rlcm1DaGFydFNldHRpbmdzJHJhZERURU9yZGVyBXFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNUZXJtQ2hhcnRTZXR0aW5ncyRyYWREVEVPcmRlcgVsY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJHVjVGVybUNoYXJ0U2V0dGluZ3MkcmFkRFRFBW1jdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNUZXJtQ2hhcnRTZXR0aW5ncyRyYWREYXRlBW1jdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkdWNUZXJtQ2hhcnRTZXR0aW5ncyRyYWREYXRlBQ9jdGwwMCR1Y01lbnVCYXIPFCsAAmQC/////w9kBVdjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWRIZWFkZXIkY3RsMDAPFCsAAmQC/////w9kBR5jdGwwMCRjdGwwNiR1Y1Byb2R1Y3RPbmx5UG9wdXAPFCsAAmQC/////w9kBXBjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDEkdWNHcm91cCRsdkV4cGlyYXRpb25zDxQrAA5kZGRkZGRkPCsABAACBGRkZGYC/////w9kBXBjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDAkdWNHcm91cCRsdkV4cGlyYXRpb25zDxQrAA5kZGRkZGRkPCsACAACCGRkZGYC/////w9kBSljdGwwMCRjdGwwNiR1Y1Byb2R1Y3RPbmx5UG9wdXAkbHZQcm9kdWN0cw8UKwAOZGRkZGRkZDwrAAkAAglkZGRmAv////8PZAWKAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsNCR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDEkdWNFeHBpcmF0aW9uVHJpZ2dlcg8UKwACZAL/////D2QFFWN0bDAwJHVjSW5zdGFudEFsZXJ0cw8UKwACZAL/////D2QFLWN0bDAwJGN0bDA2JHVjUHJvZHVjdFNlbGVjdG9yUG9wdXAkbHZGYW1pbGllcw8UKwAOZGRkZGRkZBQrAANkZGQCA2RkZGYC/////w9kBRVjdGwwMCRGb290ZXIxJHVjVmlld3MPFCsAAmQC/////w9kBSBjdGwwMCR1Y1F1aWtUb29scyR1Y1FTJHVjU2F2ZVBkZg8UKwACZAL/////D2QFZWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y1Rlcm1DaGFydFNldHRpbmdzDxQrAAJkAv////8PZAVXY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNJbnRlZ3JhdGVkVk9JUGlja2VyDxQrAAJkAv////8PZAVXY3RsMDAkTWFpbkNvbnRlbnQkdWNWaWV3Q29udHJvbF9JbnRlZ3JhdGVkT3BlbkludGVyZXN0VG9vbFN1bW1hcnkkdWNHcm91cGVkSGVhZGVyJGN0bDAxDxQrAAJkAv////8PZAWKAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMCR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDYkdWNFeHBpcmF0aW9uVHJpZ2dlcg8UKwACZAL/////D2QFhgFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeSR1Y0dyb3VwZWQkbHZHcm91cHMkY3RybDEkdWNHcm91cCRsdkV4cGlyYXRpb25zJGN0cmwyJHVjRnV0dXJlVHJpZ2dlcg8UKwACZAL/////D2QFM2N0bDAwJHVjU2VsZWN0b3IkbHZHcm91cHMkY3RybDIkY3RsMDAkbHZFeHBpcmF0aW9ucw8UKwAOZGRkZGRkZDwrAAQAAgRkZGRmAv////8PZAWKAWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZCRsdkdyb3VwcyRjdHJsMCR1Y0dyb3VwJGx2RXhwaXJhdGlvbnMkY3RybDEkdWNFeHBpcmF0aW9uVHJpZ2dlcg8UKwACZAL/////D2QFXWN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjSW50ZWdyYXRlZFZPSVBpY2tlciR2aXdlNA8UKwACZAL/////D2QFdGN0bDAwJE1haW5Db250ZW50JHVjVmlld0NvbnRyb2xfSW50ZWdyYXRlZE9wZW5JbnRlcmVzdFRvb2xTdW1tYXJ5JHVjR3JvdXBlZEhlYWRlciR1Y0V4cGlyYXRpb25QaWNrZXIkbHZHZW5lcmljR3JvdXBzDxQrAA5kZGRkZGRkFCsAAWQCAWRkZGYC/////w9kBUFjdGwwMCRNYWluQ29udGVudCR1Y1ZpZXdDb250cm9sX0ludGVncmF0ZWRPcGVuSW50ZXJlc3RUb29sU3VtbWFyeQ8UKwACZAL/////D2TUdQeE4EJQRctGiL0cG5z9EsqHrOMAYsKcr3disKJ5sA== diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 0000000..f7f8b00 --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,12 @@ +from viewstate.utils import list_to_tuple + + +def test_list_to_tuple(): + assert list_to_tuple([1, 2, 3]) == (1, 2, 3) + assert list_to_tuple((9, 8, 7)) == (9, 8, 7) + assert list_to_tuple((None, [2, 3, None])) == (None, (2, 3, None)) + assert list_to_tuple(("abc", [2, [3], (9, 8, True, False)])) == ( + "abc", + (2, (3,), (9, 8, True, False)), + ) + assert list_to_tuple("abc") == "abc" diff --git a/viewstate/parse.py b/viewstate/parse.py index 965a769..808c057 100644 --- a/viewstate/parse.py +++ b/viewstate/parse.py @@ -2,6 +2,7 @@ from .colors import COLORS from .exceptions import ViewStateException +from .utils import list_to_tuple class ParserMeta(type): @@ -250,7 +251,11 @@ def parse(b): for _ in range(n): k, remain = Parser.parse(remain) v, remain = Parser.parse(remain) - d[k] = v + try: + d[k] = v + except TypeError: + # make the key hashable by deep converting lists to tuples + d[list_to_tuple(k)] = v return d, remain diff --git a/viewstate/utils.py b/viewstate/utils.py new file mode 100644 index 0000000..a47ea89 --- /dev/null +++ b/viewstate/utils.py @@ -0,0 +1,5 @@ +def list_to_tuple(lst): + if isinstance(lst, list) or isinstance(lst, tuple): + return tuple([list_to_tuple(e) for e in lst]) + else: + return lst