From 6d5fd32154079eb10194b473336e6a109e72cce5 Mon Sep 17 00:00:00 2001 From: quantumagi Date: Tue, 22 Nov 2022 20:40:16 +1100 Subject: [PATCH] Make GetTransactionReference private --- .../MintableTokenInvoiceTests.cs | 38 +++++++++++++++++++ .../MintableTokenInvoice.cs | 4 +- Testnet/MintableTokenInvoice/README.MD | 4 +- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/Testnet/MintableTokenInvoice/MintableTokenInvoice.Tests/MintableTokenInvoiceTests.cs b/Testnet/MintableTokenInvoice/MintableTokenInvoice.Tests/MintableTokenInvoiceTests.cs index d8a62378..f93ffccb 100644 --- a/Testnet/MintableTokenInvoice/MintableTokenInvoice.Tests/MintableTokenInvoiceTests.cs +++ b/Testnet/MintableTokenInvoice/MintableTokenInvoice.Tests/MintableTokenInvoiceTests.cs @@ -98,8 +98,16 @@ public void CanCreateInvoice() var transactionReference = mintableTokenInvoice.CreateInvoice("GBPT", 100, uniqueNumber); var invoiceReference = mintableTokenInvoice.GetInvoiceReference(transactionReference); + Assert.Equal("INV-1760-4750-2039", invoiceReference.ToString()); + + // 42 is checksum for INV numbers. + Assert.Equal(42UL, ulong.Parse(invoiceReference.Replace("-", string.Empty)[3..]) % 97); + Assert.Equal("REF-5377-4902-2339", transactionReference.ToString()); + // 1 is checksum for REF numbers. + Assert.Equal(1UL, ulong.Parse(transactionReference.Replace("-", string.Empty)[3..]) % 97); + var invoiceBytes = mintableTokenInvoice.RetrieveInvoice(invoiceReference, true); var invoice = this.Serializer.ToStruct(invoiceBytes); @@ -182,4 +190,34 @@ public void CantCreateInvoiceIfDidNotExist() var ex = Assert.Throws(() => mintableTokenInvoice.CreateInvoice("GBPT", 200, uniqueNumber)); Assert.Contains("processed", ex.Message); } + + [Fact] + public void CanSetIdentityContract() + { + var mintableTokenInvoice = this.CreateNewMintableTokenContract(); + + mintableTokenInvoice.SetIdentityContract(this.Contract); + + Assert.Equal(this.Contract, mintableTokenInvoice.IdentityContract); + } + + [Fact] + public void CanSetKYCProvider() + { + var mintableTokenInvoice = this.CreateNewMintableTokenContract(); + + mintableTokenInvoice.SetKYCProvider(2); + + Assert.Equal((uint)2, mintableTokenInvoice.KYCProvider); + } + + [Fact] + public void CanSetAuthorizationLimit() + { + var mintableTokenInvoice = this.CreateNewMintableTokenContract(); + + mintableTokenInvoice.SetAuthorizationLimit(300); + + Assert.Equal((UInt256)300, mintableTokenInvoice.AuthorizationLimit); + } } \ No newline at end of file diff --git a/Testnet/MintableTokenInvoice/MintableTokenInvoice/MintableTokenInvoice.cs b/Testnet/MintableTokenInvoice/MintableTokenInvoice/MintableTokenInvoice.cs index 5c812490..6954b422 100644 --- a/Testnet/MintableTokenInvoice/MintableTokenInvoice/MintableTokenInvoice.cs +++ b/Testnet/MintableTokenInvoice/MintableTokenInvoice/MintableTokenInvoice.cs @@ -69,7 +69,7 @@ private struct TransactionReferenceTemplate public Address address; } - public string GetTransactionReference(UInt128 uniqueNumber) + private string GetTransactionReference(UInt128 uniqueNumber) { var template = new TransactionReferenceTemplate() { uniqueNumber = uniqueNumber, address = Message.Sender }; @@ -86,7 +86,7 @@ public string GetInvoiceReference(string transactionReference) // Hash the transaction reference to get the invoice reference. // This avoids the transaction reference being exposed in the SC state. var temp = Keccak256(Serializer.Serialize(transactionReference)); - var invoiceReference = $"{((Serializer.ToUInt256(temp) % 10000000000) * 97 + 1)}".PadLeft(12, '0'); + var invoiceReference = $"{((Serializer.ToUInt256(temp) % 10000000000) * 97 + 42)}".PadLeft(12, '0'); return $"INV-{invoiceReference.Substring(0, 4)}-{invoiceReference.Substring(4, 4)}-{invoiceReference.Substring(8, 4)}"; } diff --git a/Testnet/MintableTokenInvoice/README.MD b/Testnet/MintableTokenInvoice/README.MD index 1f52faea..3281e915 100644 --- a/Testnet/MintableTokenInvoice/README.MD +++ b/Testnet/MintableTokenInvoice/README.MD @@ -8,12 +8,12 @@ v2.0.0 **Contract Hash** ``` -345f2992c0721145b2ae935b66c630c7222778907cb124297891155fc432af06 +603c39b401c32081e69f8847bc44783fdf256970c5319b213cbc390659a1d44f ``` **Contract Byte Code** ``` -4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C0102004AECCDBE0000000000000000E00022200B013000001C000000020000000000009E3B00000020000000400000000000100020000000020000040000000000000004000000000000000060000000020000000000000300408500001000001000000000100000100000000000001000000000000000000000004C3B00004F000000000000000000000000000000000000000000000000000000004000000C000000303B00001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000A41B000000200000001C000000020000000000000000000000000000200000602E72656C6F6300000C0000000040000000020000001E0000000000000000000000000000400000420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000803B00000000000048000000020005005C270000D41300000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E60203280600000A0202280700000A6F0800000A2806000006027E0900000A28080000060204280A0000060205280C0000060219280E0000062A4602280A00000A72010000706F0B00000A2A4A02280A00000A7201000070036F0C00000A2A4602280A00000A720D0000706F0B00000A2A4A02280A00000A720D000070036F0C00000A2A4602280A00000A721F0000706F0D00000A2A4A02280A00000A721F000070036F0E00000A2A4602280A00000A72450000706F0B00000A2A4A02280A00000A7245000070036F0C00000A2A4602280A00000A72670000706F0F00000A2A4A02280A00000A7267000070036F1000000A2A6202280A00000A727F00007003281100000A046F0100002B2A5E02280A00000A727F00007003281100000A6F0200002B2A13300600AC000000010000111204FE15040000021204037D01000004120402280700000A6F0800000A7D0200000411040A02281400000A066F0300002B0B0207281600000A0C729700007002281400000A086F1700000A2100E40B5402000000281800000A281900000A1F61281A00000A281B00000A17281A00000A281C00000A8C09000001281100000A1F0C1F306F1D00000A0D729F00007009161A6F1E00000A091A1A6F1E00000A091E1A6F1E00000A281F00000A2A1330060085000000020000110202281400000A036F2000000A281600000A0A729700007002281400000A066F1700000A2100E40B5402000000281800000A281900000A1F61281A00000A281B00000A17281A00000A281C00000A8C09000001281100000A1F0C1F306F1D00000A0B72BF00007007161A6F1E00000A071A1A6F1E00000A071E1A6F1E00000A281F00000A2A00000013300800CC000000030000110202280B000006166A72DF000070188D110000012516038C05000001A2251702280D0000068C13000001A2166A282100000A0A062C08066F2200000A2D2F72F10000700B021202FE15070000021202047D0A0000041202167D0B0000041202077D0C00000408280400002B072A066F2400000A2C2202281400000A066F2400000A740100001B6F2500000A722F0100706F2600000A2D2F72530100700D021202FE15070000021202047D0A0000041202167D0B0000041202097D0C00000408280400002B092A7E2700000A2A133004003801000004000011020528110000060A020628120000060B020728100000060C087B070000047E0900000A282800000A2C4502087B0700000402280700000A6F0800000A282800000A2D1F087B0500000403282900000A2C0E087B0600000404282A00000A2B04162B0117728D010070282B00000A2B4D1204FE15060000021204037D050000041204047D06000004120402280700000A6F0800000A7D070000041204087B080000047D08000004120404022809000006282C00000A7D0900000411040C02087B08000004282D00000A087B08000004282B00000A0202280700000A6F0800000A0728130000060D0209282D00000A72D7010070282B00000A020708280F00000602087B09000004726A02007007281100000A282B00000A021205FE15070000021205077D0A0000041205177D0B0000041105280400002B062A133003004800000005000011020328100000060A042C30067B070000047E0900000A282800000A2C1E067B08000004282D00000A2C11042C0E02067B070000040328130000062602281400000A066F0500002B2A8A0202280500000602280700000A6F0800000A282E00000A72FB020070282B00000A2A00133003008000000006000011022816000006020328100000060A02067B070000047E0900000A282800000A7245030070282B00000A02067B08000004282D00000A16FE01727D030070282B00000A1200177D09000004020306280F000006021201FE150B0000021201037D130000041201177D150000041201067B090000047D1400000407280600002B172A133003003200000007000011022816000006021200FE150800000212000228090000067D0D0000041200037D0E00000406280700002B0203280A0000062A0000133003002700000008000011022816000006020328120000060A020628100000060B1201047D08000004020607280F0000062A00133003003200000009000011022816000006021200FE150A000002120002280B0000067D110000041200037D1200000406280800002B0203280C0000062A000013300300320000000A000011022816000006021200FE1509000002120002280D0000067D0F0000041200037D1000000406280900002B0203280E0000062A3A022816000006020328080000062A00000013300300690000000B0000110202280700000A6F0800000A022807000006282E00000A72D5030070282B00000A0228050000060A020228070000062806000006027E0900000A2808000006021201FE1505000002120102280700000A6F0800000A7D040000041201067D0300000407280A00002B2A00000042534A4201000100000000000C00000076342E302E33303331390000000005006C00000088060000237E0000F40600008006000023537472696E677300000000740D000028040000235553009C110000100000002347554944000000AC1100002802000023426C6F6200000000000000020000015717A209090A000000FA01330016000001000000130000000B000000150000001D0000001C000000010000002E000000080000000B00000002000000060000000B000000010000000100000002000000080000000A0000000000AE020100000000000600150235040600540235040600010222040F00550400000A00870497040A00440297040A00CC0497040A00C90197040A00370097040A003F0097040A001406970406009801CE020A00350297040A00700197040A00F001970406009402CE0206004C05CE020A000104970406000E00CE020000000047000000000001000100A10000001703000000000100010001001000EB0000001D00010004000B011000A2010000310001001E000A0110007E000000310003001E000A0110000E010000310005001E000A0110000606000031000A001E000A011000B205000031000D001E000A0110006203000031000F001E000A01100010050000310011001E000A011000E1020000310013001E00060035037A0106008F0420000600CD0320000600F80320000600C0020001060024067E0106000F0320000600880100010600A100820106002101000106007104820106000803000106007B057E010600F4057E0106008F03850106009B0385010600C00420000600DA0420000600210100010600930082010600AE008201000000000000C60DB9031B000100000000000000C605F50388010100000000000000C60526030600020050200000000086181C048E0102008A2000000000E609B9031B0005009C20000000008108C30388010500AF20000000008608DB031B000600C120000000008108E80388010600D420000000008608840598010700E6200000000081089B059D010700F920000000008608E6041B0008000B21000000008108FB04880108001E210000000086084203A301090030210000000081085203A701090043210000000081000B01AC010A005C210000000081000001B3010C0074210000000086004301B9010D002C220000000086001E01BF010E00C0220000000081005000C4010F009823000000008600BC00CB011100DC24000000008600CA00D401140030250000000081003906060016005425000000008600DA00FB001600E025000000008600CB059D01170020260000000086008501DB0118005426000000008600270588011A0094260000000086007403A7011B00D22600000000E601F50388011C00E42600000000E601260306001D00000001008F0400000100DD0100000200E105000003003B05000001008202000001008202000001008202000001008202000001008202000001003201000002001601000001003201000001003503000001005B0100000100B20300000200320100000100C702000002002B06000003003503000001003201000002005C0000000100320100000100FD05000001005B01000002009001000001003B05000001008303000001008F040300080009001C04010011001C04060019001C040A0031001C04060069001C04060039001C0410003900790116007100A7031B002900120320003900BF012400790079042900790084042F00790029003600790034003C0079000100430079000B0048008100B9044E0079005D05540079005305610039000D04740091008802790039001500860091001F008D0049006F0594004900AE049A0049006F05A300490049069A004900FC029A0081006705A90081009B02AF008100B904B50091008802C3003900A902D20059006D04DE003900A502E20059007202EE0091009202F50081006404FB00810077060001290061060F01810061061701490061061D013900320625014900D5021D0181006F062B01290055060F012E000B00EF012E001300F8012E001B00170261002B00200263002300200281002B00200241012B00200261022B0020026800BD00C90003013001350141014B0151015B01650102000100030002000000FB03E1010000FB03E1010000F803E1010000CE05E60100002A05E10100007703EB0102000100030002000500050001000600050002000700070001000800070002000900090001000A00090002000B000B0001000C000B0002000D000D0001000E000D00F200048000000000000000000000000000000000CC040000040000000000000000000000710167000000000002000000000000000000000000009704000000000400030005000300060003000700030008000300090003000A0003000B00030025005C0027005C002B0081004700E9002B005C0047003C0147004601470056014700600147006C0100000047657455496E7433320053657455496E743332004B656363616B32353600546F55496E743235360047657455496E743235360053657455496E743235360055496E74313238003C4D6F64756C653E0056616C69646174654B5943007265636865636B4B59430053797374656D2E507269766174652E436F72654C6962004F776E6572736869705472616E73666572726564004F6C64417574686F72697A6564004973417574686F72697A6564004E6577417574686F72697A656400437265617465496E766F696365005265747269657665496E766F69636500417574686F72697A65496E766F696365004D696E7461626C65546F6B656E496E766F69636500476574496E766F69636500536574496E766F69636500696E766F69636500476574496E766F6963655265666572656E636500696E766F6963655265666572656E6365004765745472616E73616374696F6E5265666572656E6365007472616E73616374696F6E5265666572656E636500494D657373616765006765745F4D657373616765005365744F7574636F6D65006F7574636F6D650056616C756554797065005472616E73616374696F6E5265666572656E636554656D706C617465006765745F53746174650049536D617274436F6E7472616374537461746500736D617274436F6E74726163745374617465004950657273697374656E7453746174650044656275676761626C6541747472696275746500436F6D70696C6174696F6E52656C61786174696F6E7341747472696275746500496E646578417474726962757465004465706C6F794174747269627574650052756E74696D65436F6D7061746962696C697479417474726962757465006765745F52657475726E56616C75650076616C75650053657269616C697A6500546F537472696E6700537562737472696E67004C6F670043616C6C00536D617274436F6E74726163742E646C6C0053796D626F6C0073796D626F6C0053797374656D006F705F4C6573735468616E004368616E6765496E766F696365417574686F72697A6174696F6E006F705F4164646974696F6E00526561736F6E00546F005A65726F004950756C6C4F776E65727368697000436C61696D4F776E65727368697000756E697175654E756D626572006765745F4B594350726F7669646572007365745F4B594350726F7669646572004368616E67654B594350726F7669646572005365744B594350726F7669646572006B796350726F7669646572004F6C6450726F7669646572004E657750726F7669646572006765745F53656E6465720073656E646572006765745F4F776E6572007365745F4F776E65720050726576696F75734F776E6572006765745F4E65774F776E6572007365745F4E65774F776E6572005365744E65774F776E6572004953657269616C697A6572006765745F53657269616C697A6572002E63746F720053797374656D2E446961676E6F73746963730053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300446562756767696E674D6F64657300436F6E7461696E73006765745F5375636365737300476574416464726573730053657441646472657373006164647265737300537472617469732E536D617274436F6E747261637473006F705F4D6F64756C757300466F726D6174004F6C64436F6E747261637400536D617274436F6E7472616374004E6577436F6E7472616374006765745F4964656E74697479436F6E7472616374007365745F4964656E74697479436F6E7472616374004368616E67654964656E74697479436F6E7472616374005365744964656E74697479436F6E7472616374006964656E74697479436F6E7472616374004F626A6563740047657453747275637400536574537472756374005061644C656674006F705F496D706C69636974004F6C644C696D6974006765745F417574686F72697A6174696F6E4C696D6974007365745F417574686F72697A6174696F6E4C696D6974004368616E6765417574686F72697A6174696F6E4C696D697400536574417574686F72697A6174696F6E4C696D697400617574686F72697A6174696F6E4C696D6974004E65774C696D6974006E65774C696D697400496E766F696365526573756C7400495472616E73666572526573756C7400416D6F756E7400616D6F756E740041737365727400456E737572654F776E65724F6E6C79006F705F4D756C7469706C79006F705F457175616C697479006F705F496E657175616C6974790049734E756C6C4F72456D70747900000000000B4F0077006E006500720000114E00650077004F0077006E0065007200002541007500740068006F00720069007A006100740069006F006E004C0069006D006900740000214900640065006E00740069007400790043006F006E007400720061006300740000174B0059004300500072006F0076006900640065007200001749006E0076006F006900630065003A007B0030007D0000077B0030007D00001F5200450046002D007B0030007D002D007B0031007D002D007B0032007D00011F49004E0056002D007B0030007D002D007B0031007D002D007B0032007D00011147006500740043006C00610069006D00003D43006F0075006C00640020006E006F0074002000640065007400650072006D0069006E00650020004B0059004300200073007400610074007500730000234900640065006E007400690074007900200041007000700072006F00760065006400003959006F007500720020004B0059004300200073007400610074007500730020006900730020006E006F0074002000760061006C006900640000495400720061006E00730061006300740069006F006E0020007200650066006500720065006E0063006500200061006C007200650061006400790020006500780069007300740073000080914F0062007400610069006E0020004B0059004300200076006500720069006600690063006100740069006F006E00200066006F0072002000740068006900730020006100640064007200650073007300200061006E00640020007400680065006E002000720065007300750062006D006900740020007400680069007300200072006500710075006500730074002E0000808F4F0062007400610069006E00200061007500740068006F00720069007A006100740069006F006E00200066006F00720020007400680069007300200069006E0076006F00690063006500200028007B0030007D00290020007400680065006E002000720065007300750062006D006900740020007400680069007300200072006500710075006500730074002E0000494F006E006C007900200074006800650020006F0077006E00650072002000630061006E002000630061006C006C002000740068006900730020006D006500740068006F0064002E000037540068006500200069006E0076006F00690063006500200064006F006500730020006E006F0074002000650078006900730074002E00005754006800650020007400720061006E00730061006300740069006F006E002000680061007300200061006C007200650061006400790020006200650065006E002000700072006F006300650073007300650064002E00004F4F006E006C007900200074006800650020006E006500770020006F0077006E00650072002000630061006E002000630061006C006C002000740068006900730020006D006500740068006F006400000000005F490EC45B86BE43B2024FAB04555E71000420010108032000010520010111110520010112210420001239042000111503061115042000123D05200111150E062002010E111505200111250E062002010E1125042001090E052002010E090500020E0E1C07300102010E1E00040A011118063001011E000E0B070511101D051D050E11100420001249073001011D051E00040A0111100620011D051D0506200111251D0505000111250A0800021125112511250500011125080520020E08030520020E08080700040E0E1C1C1C0507021D050E0520011D050E080704122D0E111C0E0B2005122D11150B0E1D1C0B0320000206300101011E00040A01111C0320001C021D050520010E1D05042001020E02060E0B07060E0E11180E1118111C0700020211151115050002020E0E070002021125112505200201020E040001020E04070111180607021118112C040A01112C0407011120040A0111200507020E11180407011128040A0111280407011124040A01112406070211151114040A011114087CEC85D7BEA7798E0306112903061125020602020609052001011115092003011221112511150420001125052001011125032000090420010109062002010E111805200111180E0520010E11290420010E0E0620020E11150E0820030E0E112511290620021D050E02052002010E0E04280011150428001125032800090801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F777301080100020000000000040100000000000000000000000000000000000010000000000000000000000000000000743B000000000000000000008E3B0000002000000000000000000000000000000000000000000000803B0000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000C000000A03B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C0102004BAF41D40000000000000000E00022200B013000001C000000020000000000009E3B00000020000000400000000000100020000000020000040000000000000004000000000000000060000000020000000000000300408500001000001000000000100000100000000000001000000000000000000000004C3B00004F000000000000000000000000000000000000000000000000000000004000000C000000303B00001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000A41B000000200000001C000000020000000000000000000000000000200000602E72656C6F6300000C0000000040000000020000001E0000000000000000000000000000400000420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000803B00000000000048000000020005005C270000D41300000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E60203280600000A0202280700000A6F0800000A2806000006027E0900000A28080000060204280A0000060205280C0000060219280E0000062A4602280A00000A72010000706F0B00000A2A4A02280A00000A7201000070036F0C00000A2A4602280A00000A720D0000706F0B00000A2A4A02280A00000A720D000070036F0C00000A2A4602280A00000A721F0000706F0D00000A2A4A02280A00000A721F000070036F0E00000A2A4602280A00000A72450000706F0B00000A2A4A02280A00000A7245000070036F0C00000A2A4602280A00000A72670000706F0F00000A2A4A02280A00000A7267000070036F1000000A2A6202280A00000A727F00007003281100000A046F0100002B2A5E02280A00000A727F00007003281100000A6F0200002B2A13300600AC000000010000111204FE15040000021204037D01000004120402280700000A6F0800000A7D0200000411040A02281400000A066F0300002B0B0207281600000A0C729700007002281400000A086F1700000A2100E40B5402000000281800000A281900000A1F61281A00000A281B00000A17281A00000A281C00000A8C09000001281100000A1F0C1F306F1D00000A0D729F00007009161A6F1E00000A091A1A6F1E00000A091E1A6F1E00000A281F00000A2A1330060086000000020000110202281400000A036F2000000A281600000A0A729700007002281400000A066F1700000A2100E40B5402000000281800000A281900000A1F61281A00000A281B00000A1F2A281A00000A281C00000A8C09000001281100000A1F0C1F306F1D00000A0B72BF00007007161A6F1E00000A071A1A6F1E00000A071E1A6F1E00000A281F00000A2A000013300800CC000000030000110202280B000006166A72DF000070188D110000012516038C05000001A2251702280D0000068C13000001A2166A282100000A0A062C08066F2200000A2D2F72F10000700B021202FE15070000021202047D0A0000041202167D0B0000041202077D0C00000408280400002B072A066F2400000A2C2202281400000A066F2400000A740100001B6F2500000A722F0100706F2600000A2D2F72530100700D021202FE15070000021202047D0A0000041202167D0B0000041202097D0C00000408280400002B092A7E2700000A2A133004003801000004000011020528110000060A020628120000060B020728100000060C087B070000047E0900000A282800000A2C4502087B0700000402280700000A6F0800000A282800000A2D1F087B0500000403282900000A2C0E087B0600000404282A00000A2B04162B0117728D010070282B00000A2B4D1204FE15060000021204037D050000041204047D06000004120402280700000A6F0800000A7D070000041204087B080000047D08000004120404022809000006282C00000A7D0900000411040C02087B08000004282D00000A087B08000004282B00000A0202280700000A6F0800000A0728130000060D0209282D00000A72D7010070282B00000A020708280F00000602087B09000004726A02007007281100000A282B00000A021205FE15070000021205077D0A0000041205177D0B0000041105280400002B062A133003004800000005000011020328100000060A042C30067B070000047E0900000A282800000A2C1E067B08000004282D00000A2C11042C0E02067B070000040328130000062602281400000A066F0500002B2A8A0202280500000602280700000A6F0800000A282E00000A72FB020070282B00000A2A00133003008000000006000011022816000006020328100000060A02067B070000047E0900000A282800000A7245030070282B00000A02067B08000004282D00000A16FE01727D030070282B00000A1200177D09000004020306280F000006021201FE150B0000021201037D130000041201177D150000041201067B090000047D1400000407280600002B172A133003003200000007000011022816000006021200FE150800000212000228090000067D0D0000041200037D0E00000406280700002B0203280A0000062A0000133003002700000008000011022816000006020328120000060A020628100000060B1201047D08000004020607280F0000062A00133003003200000009000011022816000006021200FE150A000002120002280B0000067D110000041200037D1200000406280800002B0203280C0000062A000013300300320000000A000011022816000006021200FE1509000002120002280D0000067D0F0000041200037D1000000406280900002B0203280E0000062A3A022816000006020328080000062A00000013300300690000000B0000110202280700000A6F0800000A022807000006282E00000A72D5030070282B00000A0228050000060A020228070000062806000006027E0900000A2808000006021201FE1505000002120102280700000A6F0800000A7D040000041201067D0300000407280A00002B2A00000042534A4201000100000000000C00000076342E302E33303331390000000005006C00000088060000237E0000F40600008006000023537472696E677300000000740D000028040000235553009C110000100000002347554944000000AC1100002802000023426C6F6200000000000000020000015717A209090A000000FA01330016000001000000130000000B000000150000001D0000001C000000010000002E000000080000000B00000002000000060000000B000000010000000100000002000000080000000A0000000000AE020100000000000600150235040600540235040600010222040F00550400000A00870497040A00440297040A00CC0497040A00C90197040A00370097040A003F0097040A001406970406009801CE020A00350297040A00700197040A00F001970406009402CE0206004C05CE020A000104970406000E00CE020000000047000000000001000100A10000001703000000000100010001001000EB0000001D00010004000B011000A2010000310001001E000A0110007E000000310003001E000A0110000E010000310005001E000A0110000606000031000A001E000A011000B205000031000D001E000A0110006203000031000F001E000A01100010050000310011001E000A011000E1020000310013001E00060035037A0106008F0420000600CD0320000600F80320000600C0020001060024067E0106000F0320000600880100010600A100820106002101000106007104820106000803000106007B057E010600F4057E0106008F03850106009B0385010600C00420000600DA0420000600210100010600930082010600AE008201000000000000C60DB9031B000100000000000000C605F50388010100000000000000C60526030600020050200000000086181C048E0102008A2000000000E609B9031B0005009C20000000008108C30388010500AF20000000008608DB031B000600C120000000008108E80388010600D420000000008608840598010700E6200000000081089B059D010700F920000000008608E6041B0008000B21000000008108FB04880108001E210000000086084203A301090030210000000081085203A701090043210000000081000B01AC010A005C210000000081000001B3010C0074210000000081004301B9010D002C220000000086001E01BF010E00C0220000000081005000C4010F009823000000008600BC00CB011100DC24000000008600CA00D401140030250000000081003906060016005425000000008600DA00FB001600E025000000008600CB059D01170020260000000086008501DB0118005426000000008600270588011A0094260000000086007403A7011B00D22600000000E601F50388011C00E42600000000E601260306001D00000001008F0400000100DD0100000200E105000003003B05000001008202000001008202000001008202000001008202000001008202000001003201000002001601000001003201000001003503000001005B0100000100B20300000200320100000100C702000002002B06000003003503000001003201000002005C0000000100320100000100FD05000001005B01000002009001000001003B05000001008303000001008F040300080009001C04010011001C04060019001C040A0031001C04060069001C04060039001C0410003900790116007100A7031B002900120320003900BF012400790079042900790084042F00790029003600790034003C0079000100430079000B0048008100B9044E0079005D05540079005305610039000D04740091008802790039001500860091001F008D0049006F0594004900AE049A0049006F05A300490049069A004900FC029A0081006705A90081009B02AF008100B904B50091008802C3003900A902D20059006D04DE003900A502E20059007202EE0091009202F50081006404FB00810077060001290061060F01810061061701490061061D013900320625014900D5021D0181006F062B01290055060F012E000B00EF012E001300F8012E001B00170261002B00200263002300200281002B00200241012B00200261022B0020026800BD00C90003013001350141014B0151015B01650102000100030002000000FB03E1010000FB03E1010000F803E1010000CE05E60100002A05E10100007703EB0102000100030002000500050001000600050002000700070001000800070002000900090001000A00090002000B000B0001000C000B0002000D000D0001000E000D00F200048000000000000000000000000000000000CC040000040000000000000000000000710167000000000002000000000000000000000000009704000000000400030005000300060003000700030008000300090003000A0003000B00030025005C0027005C002B0081004700E9002B005C0047003C0147004601470056014700600147006C0100000047657455496E7433320053657455496E743332004B656363616B32353600546F55496E743235360047657455496E743235360053657455496E743235360055496E74313238003C4D6F64756C653E0056616C69646174654B5943007265636865636B4B59430053797374656D2E507269766174652E436F72654C6962004F776E6572736869705472616E73666572726564004F6C64417574686F72697A6564004973417574686F72697A6564004E6577417574686F72697A656400437265617465496E766F696365005265747269657665496E766F69636500417574686F72697A65496E766F696365004D696E7461626C65546F6B656E496E766F69636500476574496E766F69636500536574496E766F69636500696E766F69636500476574496E766F6963655265666572656E636500696E766F6963655265666572656E6365004765745472616E73616374696F6E5265666572656E6365007472616E73616374696F6E5265666572656E636500494D657373616765006765745F4D657373616765005365744F7574636F6D65006F7574636F6D650056616C756554797065005472616E73616374696F6E5265666572656E636554656D706C617465006765745F53746174650049536D617274436F6E7472616374537461746500736D617274436F6E74726163745374617465004950657273697374656E7453746174650044656275676761626C6541747472696275746500436F6D70696C6174696F6E52656C61786174696F6E7341747472696275746500496E646578417474726962757465004465706C6F794174747269627574650052756E74696D65436F6D7061746962696C697479417474726962757465006765745F52657475726E56616C75650076616C75650053657269616C697A6500546F537472696E6700537562737472696E67004C6F670043616C6C00536D617274436F6E74726163742E646C6C0053796D626F6C0073796D626F6C0053797374656D006F705F4C6573735468616E004368616E6765496E766F696365417574686F72697A6174696F6E006F705F4164646974696F6E00526561736F6E00546F005A65726F004950756C6C4F776E65727368697000436C61696D4F776E65727368697000756E697175654E756D626572006765745F4B594350726F7669646572007365745F4B594350726F7669646572004368616E67654B594350726F7669646572005365744B594350726F7669646572006B796350726F7669646572004F6C6450726F7669646572004E657750726F7669646572006765745F53656E6465720073656E646572006765745F4F776E6572007365745F4F776E65720050726576696F75734F776E6572006765745F4E65774F776E6572007365745F4E65774F776E6572005365744E65774F776E6572004953657269616C697A6572006765745F53657269616C697A6572002E63746F720053797374656D2E446961676E6F73746963730053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300446562756767696E674D6F64657300436F6E7461696E73006765745F5375636365737300476574416464726573730053657441646472657373006164647265737300537472617469732E536D617274436F6E747261637473006F705F4D6F64756C757300466F726D6174004F6C64436F6E747261637400536D617274436F6E7472616374004E6577436F6E7472616374006765745F4964656E74697479436F6E7472616374007365745F4964656E74697479436F6E7472616374004368616E67654964656E74697479436F6E7472616374005365744964656E74697479436F6E7472616374006964656E74697479436F6E7472616374004F626A6563740047657453747275637400536574537472756374005061644C656674006F705F496D706C69636974004F6C644C696D6974006765745F417574686F72697A6174696F6E4C696D6974007365745F417574686F72697A6174696F6E4C696D6974004368616E6765417574686F72697A6174696F6E4C696D697400536574417574686F72697A6174696F6E4C696D697400617574686F72697A6174696F6E4C696D6974004E65774C696D6974006E65774C696D697400496E766F696365526573756C7400495472616E73666572526573756C7400416D6F756E7400616D6F756E740041737365727400456E737572654F776E65724F6E6C79006F705F4D756C7469706C79006F705F457175616C697479006F705F496E657175616C6974790049734E756C6C4F72456D70747900000000000B4F0077006E006500720000114E00650077004F0077006E0065007200002541007500740068006F00720069007A006100740069006F006E004C0069006D006900740000214900640065006E00740069007400790043006F006E007400720061006300740000174B0059004300500072006F0076006900640065007200001749006E0076006F006900630065003A007B0030007D0000077B0030007D00001F5200450046002D007B0030007D002D007B0031007D002D007B0032007D00011F49004E0056002D007B0030007D002D007B0031007D002D007B0032007D00011147006500740043006C00610069006D00003D43006F0075006C00640020006E006F0074002000640065007400650072006D0069006E00650020004B0059004300200073007400610074007500730000234900640065006E007400690074007900200041007000700072006F00760065006400003959006F007500720020004B0059004300200073007400610074007500730020006900730020006E006F0074002000760061006C006900640000495400720061006E00730061006300740069006F006E0020007200650066006500720065006E0063006500200061006C007200650061006400790020006500780069007300740073000080914F0062007400610069006E0020004B0059004300200076006500720069006600690063006100740069006F006E00200066006F0072002000740068006900730020006100640064007200650073007300200061006E00640020007400680065006E002000720065007300750062006D006900740020007400680069007300200072006500710075006500730074002E0000808F4F0062007400610069006E00200061007500740068006F00720069007A006100740069006F006E00200066006F00720020007400680069007300200069006E0076006F00690063006500200028007B0030007D00290020007400680065006E002000720065007300750062006D006900740020007400680069007300200072006500710075006500730074002E0000494F006E006C007900200074006800650020006F0077006E00650072002000630061006E002000630061006C006C002000740068006900730020006D006500740068006F0064002E000037540068006500200069006E0076006F00690063006500200064006F006500730020006E006F0074002000650078006900730074002E00005754006800650020007400720061006E00730061006300740069006F006E002000680061007300200061006C007200650061006400790020006200650065006E002000700072006F006300650073007300650064002E00004F4F006E006C007900200074006800650020006E006500770020006F0077006E00650072002000630061006E002000630061006C006C002000740068006900730020006D006500740068006F00640000000000BAAA39DF6CCB054F9649BA889FDDBF68000420010108032000010520010111110520010112210420001239042000111503061115042000123D05200111150E062002010E111505200111250E062002010E1125042001090E052002010E090500020E0E1C07300102010E1E00040A011118063001011E000E0B070511101D051D050E11100420001249073001011D051E00040A0111100620011D051D0506200111251D0505000111250A0800021125112511250500011125080520020E08030520020E08080700040E0E1C1C1C0507021D050E0520011D050E080704122D0E111C0E0B2005122D11150B0E1D1C0B0320000206300101011E00040A01111C0320001C021D050520010E1D05042001020E02060E0B07060E0E11180E1118111C0700020211151115050002020E0E070002021125112505200201020E040001020E04070111180607021118112C040A01112C0407011120040A0111200507020E11180407011128040A0111280407011124040A01112406070211151114040A011114087CEC85D7BEA7798E0306112903061125020602020609052001011115092003011221112511150420001125052001011125032000090420010109062002010E111805200111180E0520010E11290420010E0E0620020E11150E0820030E0E112511290620021D050E02052002010E0E04280011150428001125032800090801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F777301080100020000000000040100000000000000000000000000000000000010000000000000000000000000000000743B000000000000000000008E3B0000002000000000000000000000000000000000000000000000803B0000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000C000000A03B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ```