6101406040523480156200001257600080fd5b5060405162004c0438038062004c04833981810160405281019062000038919062000839565b7342000000000000000000000000000000000000146005826040518060400160405280600b81526020017f436f617374616c204d61700000000000000000000000000000000000000000008152506040518060400160405280600b81526020017f434f415354414c204d415000000000000000000000000000000000000000000081525060016002600084848160009081620000d5919062000ae5565b508060019081620000e7919062000ae5565b50505082608081815250508160a081815250508060c08181525050505050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160362000177576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016e9062000c53565b60405180910390fd5b60008403620001bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001b49062000ceb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200022f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002269062000d83565b60405180910390fd5b8360e081815250508273ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff166101208173ffffffffffffffffffffffffffffffffffffffff1681525050620002cf8373ffffffffffffffffffffffffffffffffffffffff1660146200032460201b6200105d1760201c565b620002e5856200057f60201b620012991760201c565b604051602001620002f892919062000f0d565b604051602081830303815290604052600a908162000317919062000ae5565b5050505050505062001147565b60606000600283600262000339919062000f8b565b62000345919062000fec565b67ffffffffffffffff81111562000361576200036062000876565b5b6040519080825280601f01601f191660200182016040528015620003945781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110620003cf57620003ce62001049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811062000436576200043562001049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600262000478919062000f8b565b62000484919062000fec565b90505b60018111156200052e577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110620004ca57620004c962001049565b5b1a60f81b828281518110620004e457620004e362001049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080620005269062001078565b905062000487565b506000841462000575576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200056c90620010f6565b60405180910390fd5b8091505092915050565b6060600060016200059b846200066360201b620013671760201c565b01905060008167ffffffffffffffff811115620005bd57620005bc62000876565b5b6040519080825280601f01601f191660200182016040528015620005f05781602001600182028036833780820191505090505b509050600082602001820190505b60011562000658578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816200064b576200064a62001118565b5b04945060008503620005fe575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310620006c5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381620006bb57620006ba62001118565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831062000706576d04ee2d6d415b85acef81000000008381620006fc57620006fb62001118565b5b0492506020810190505b662386f26fc1000083106200073957662386f26fc1000083816200072f576200072e62001118565b5b0492506010810190505b6305f5e100831062000766576305f5e10083816200075c576200075b62001118565b5b0492506008810190505b61271083106200078f57612710838162000785576200078462001118565b5b0492506004810190505b60648310620007b65760648381620007ac57620007ab62001118565b5b0492506002810190505b600a8310620007c6576001810190505b80915050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200080182620007d4565b9050919050565b6200081381620007f4565b81146200081f57600080fd5b50565b600081519050620008338162000808565b92915050565b600060208284031215620008525762000851620007cf565b5b6000620008628482850162000822565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008ed57607f821691505b602082108103620009035762000902620008a5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200096d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200092e565b6200097986836200092e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009c6620009c0620009ba8462000991565b6200099b565b62000991565b9050919050565b6000819050919050565b620009e283620009a5565b620009fa620009f182620009cd565b8484546200093b565b825550505050565b600090565b62000a1162000a02565b62000a1e818484620009d7565b505050565b5b8181101562000a465762000a3a60008262000a07565b60018101905062000a24565b5050565b601f82111562000a955762000a5f8162000909565b62000a6a846200091e565b8101602085101562000a7a578190505b62000a9262000a89856200091e565b83018262000a23565b50505b505050565b600082821c905092915050565b600062000aba6000198460080262000a9a565b1980831691505092915050565b600062000ad5838362000aa7565b9150826002028217905092915050565b62000af0826200086b565b67ffffffffffffffff81111562000b0c5762000b0b62000876565b5b62000b188254620008d4565b62000b2582828562000a4a565b600060209050601f83116001811462000b5d576000841562000b48578287015190505b62000b54858262000ac7565b86555062000bc4565b601f19841662000b6d8662000909565b60005b8281101562000b975784890151825560018201915060208501945060208101905062000b70565b8683101562000bb7578489015162000bb3601f89168262000aa7565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f7074696d69736d4d696e7461626c654552433732313a20627269646765206360008201527f616e6e6f74206265206164647265737328302900000000000000000000000000602082015250565b600062000c3b60338362000bcc565b915062000c488262000bdd565b604082019050919050565b6000602082019050818103600083015262000c6e8162000c2c565b9050919050565b7f4f7074696d69736d4d696e7461626c654552433732313a2072656d6f7465206360008201527f6861696e2069642063616e6e6f74206265207a65726f00000000000000000000602082015250565b600062000cd360368362000bcc565b915062000ce08262000c75565b604082019050919050565b6000602082019050818103600083015262000d068162000cc4565b9050919050565b7f4f7074696d69736d4d696e7461626c654552433732313a2072656d6f7465207460008201527f6f6b656e2063616e6e6f74206265206164647265737328302900000000000000602082015250565b600062000d6b60398362000bcc565b915062000d788262000d0d565b604082019050919050565b6000602082019050818103600083015262000d9e8162000d5c565b9050919050565b600081905092915050565b7f657468657265756d3a0000000000000000000000000000000000000000000000600082015250565b600062000de860098362000da5565b915062000df58262000db0565b600982019050919050565b60005b8381101562000e2057808201518184015260208101905062000e03565b8381111562000e30576000848401525b50505050565b600062000e43826200086b565b62000e4f818562000da5565b935062000e6181856020860162000e00565b80840191505092915050565b7f4000000000000000000000000000000000000000000000000000000000000000600082015250565b600062000ea560018362000da5565b915062000eb28262000e6d565b600182019050919050565b7f2f746f6b656e5552493f75696e743235363d0000000000000000000000000000600082015250565b600062000ef560128362000da5565b915062000f028262000ebd565b601282019050919050565b600062000f1a8262000dd9565b915062000f28828562000e36565b915062000f358262000e96565b915062000f43828462000e36565b915062000f508262000ee6565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f988262000991565b915062000fa58362000991565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000fe15762000fe062000f5c565b5b828202905092915050565b600062000ff98262000991565b9150620010068362000991565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200103e576200103d62000f5c565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000620010858262000991565b9150600082036200109b576200109a62000f5c565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000620010de60208362000bcc565b9150620010eb82620010a6565b602082019050919050565b600060208201905081810360008301526200111181620010cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60805160a05160c05160e0516101005161012051613a4a620011ba60003960008181610bee01528181610cd701528181610f59015261103b0152600081816105a20152610f31015260008181610b380152610f81015260006109af015260006109860152600061095d0152613a4a6000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80637d1d0c5b116100de578063c87b56dd11610097578063e78cea9211610071578063e78cea9214610497578063e9518196146104b5578063e985e9c5146104d3578063ee9a31a2146105035761018e565b8063c87b56dd1461042b578063d547cfb71461045b578063d6c0b2c4146104795761018e565b80637d1d0c5b1461037f57806395d89b411461039d5780639dc29fac146103bb578063a1448194146103d7578063a22cb465146103f3578063b88d4fde1461040f5761018e565b806323b872dd1161014b5780634f6ccce7116101255780634f6ccce7146102d157806354fd4d50146103015780636352211e1461031f57806370a082311461034f5761018e565b806323b872dd146102695780632f745c591461028557806342842e0e146102b55761018e565b806301ffc9a714610193578063033964be146101c357806306fdde03146101e1578063081812fc146101ff578063095ea7b31461022f57806318160ddd1461024b575b600080fd5b6101ad60048036038101906101a8919061285c565b610521565b6040516101ba91906128a4565b60405180910390f35b6101cb6105a0565b6040516101d89190612900565b60405180910390f35b6101e96105c4565b6040516101f691906129b4565b60405180910390f35b61021960048036038101906102149190612a0c565b610656565b6040516102269190612900565b60405180910390f35b61024960048036038101906102449190612a65565b61069c565b005b6102536107b3565b6040516102609190612ab4565b60405180910390f35b610283600480360381019061027e9190612acf565b6107c0565b005b61029f600480360381019061029a9190612a65565b610820565b6040516102ac9190612ab4565b60405180910390f35b6102cf60048036038101906102ca9190612acf565b6108c5565b005b6102eb60048036038101906102e69190612a0c565b6108e5565b6040516102f89190612ab4565b60405180910390f35b610309610956565b60405161031691906129b4565b60405180910390f35b61033960048036038101906103349190612a0c565b6109f9565b6040516103469190612900565b60405180910390f35b61036960048036038101906103649190612b22565b610a7f565b6040516103769190612ab4565b60405180910390f35b610387610b36565b6040516103949190612ab4565b60405180910390f35b6103a5610b5a565b6040516103b291906129b4565b60405180910390f35b6103d560048036038101906103d09190612a65565b610bec565b005b6103f160048036038101906103ec9190612a65565b610cd5565b005b61040d60048036038101906104089190612b7b565b610dbf565b005b61042960048036038101906104249190612cf0565b610dd5565b005b61044560048036038101906104409190612a0c565b610e37565b60405161045291906129b4565b60405180910390f35b610463610e9f565b60405161047091906129b4565b60405180910390f35b610481610f2d565b60405161048e9190612900565b60405180910390f35b61049f610f55565b6040516104ac9190612900565b60405180910390f35b6104bd610f7d565b6040516104ca9190612ab4565b60405180910390f35b6104ed60048036038101906104e89190612d73565b610fa5565b6040516104fa91906128a4565b60405180910390f35b61050b611039565b6040516105189190612900565b60405180910390f35b6000807f74259ebf000000000000000000000000000000000000000000000000000000009050807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105985750610597836114ba565b5b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060600080546105d390612de2565b80601f01602080910402602001604051908101604052809291908181526020018280546105ff90612de2565b801561064c5780601f106106215761010080835404028352916020019161064c565b820191906000526020600020905b81548152906001019060200180831161062f57829003601f168201915b5050505050905090565b600061066182611534565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106a7826109f9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070e90612e85565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661073661157f565b73ffffffffffffffffffffffffffffffffffffffff16148061076557506107648161075f61157f565b610fa5565b5b6107a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079b90612f17565b60405180910390fd5b6107ae8383611587565b505050565b6000600880549050905090565b6107d16107cb61157f565b82611640565b610810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080790612fa9565b60405180910390fd5b61081b8383836116d5565b505050565b600061082b83610a7f565b821061086c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108639061303b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6108e083838360405180602001604052806000815250610dd5565b505050565b60006108ef6107b3565b8210610930576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610927906130cd565b60405180910390fd5b60088281548110610944576109436130ed565b5b90600052602060002001549050919050565b60606109817f0000000000000000000000000000000000000000000000000000000000000000611299565b6109aa7f0000000000000000000000000000000000000000000000000000000000000000611299565b6109d37f0000000000000000000000000000000000000000000000000000000000000000611299565b6040516020016109e5939291906131a4565b604051602081830303815290604052905090565b600080610a05836119ce565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d90613237565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae6906132c9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b606060018054610b6990612de2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9590612de2565b8015610be25780601f10610bb757610100808354040283529160200191610be2565b820191906000526020600020905b815481529060010190602001808311610bc557829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c719061335b565b60405180910390fd5b610c8381611a0b565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051610cc99190612ab4565b60405180910390a25050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a9061335b565b60405180910390fd5b610d6d8282611b59565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051610db39190612ab4565b60405180910390a25050565b610dd1610dca61157f565b8383611b77565b5050565b610de6610de061157f565b83611640565b610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90612fa9565b60405180910390fd5b610e3184848484611ce3565b50505050565b6060610e4282611534565b6000610e4c611d3f565b90506000815111610e6c5760405180602001604052806000815250610e97565b80610e7684611299565b604051602001610e8792919061337b565b6040516020818303038152906040525b915050919050565b600a8054610eac90612de2565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed890612de2565b8015610f255780601f10610efa57610100808354040283529160200191610f25565b820191906000526020600020905b815481529060010190602001808311610f0857829003601f168201915b505050505081565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606000600283600261107091906133ce565b61107a9190613428565b67ffffffffffffffff81111561109357611092612bc5565b5b6040519080825280601f01601f1916602001820160405280156110c55781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106110fd576110fc6130ed565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611161576111606130ed565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026111a191906133ce565b6111ab9190613428565b90505b600181111561124b577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106111ed576111ec6130ed565b5b1a60f81b828281518110611204576112036130ed565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806112449061347e565b90506111ae565b506000841461128f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611286906134f3565b60405180910390fd5b8091505092915050565b6060600060016112a884611367565b01905060008167ffffffffffffffff8111156112c7576112c6612bc5565b5b6040519080825280601f01601f1916602001820160405280156112f95781602001600182028036833780820191505090505b509050600082602001820190505b60011561135c578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816113505761134f613513565b5b04945060008503611307575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106113c5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816113bb576113ba613513565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611402576d04ee2d6d415b85acef810000000083816113f8576113f7613513565b5b0492506020810190505b662386f26fc10000831061143157662386f26fc10000838161142757611426613513565b5b0492506010810190505b6305f5e100831061145a576305f5e10083816114505761144f613513565b5b0492506008810190505b612710831061147f57612710838161147557611474613513565b5b0492506004810190505b606483106114a2576064838161149857611497613513565b5b0492506002810190505b600a83106114b1576001810190505b80915050919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061152d575061152c82611dd1565b5b9050919050565b61153d81611eb3565b61157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390613237565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115fa836109f9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061164c836109f9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061168e575061168d8185610fa5565b5b806116cc57508373ffffffffffffffffffffffffffffffffffffffff166116b484610656565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116f5826109f9565b73ffffffffffffffffffffffffffffffffffffffff161461174b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611742906135b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b190613646565b60405180910390fd5b6117c78383836001611ef4565b8273ffffffffffffffffffffffffffffffffffffffff166117e7826109f9565b73ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906135b4565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119c98383836001612052565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000611a16826109f9565b9050611a26816000846001611ef4565b611a2f826109f9565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611b55816000846001612052565b5050565b611b73828260405180602001604052806000815250612058565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdc906136b2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cd691906128a4565b60405180910390a3505050565b611cee8484846116d5565b611cfa848484846120b3565b611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3090613744565b60405180910390fd5b50505050565b6060600a8054611d4e90612de2565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7a90612de2565b8015611dc75780601f10611d9c57610100808354040283529160200191611dc7565b820191906000526020600020905b815481529060010190602001808311611daa57829003601f168201915b5050505050905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e9c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611eac5750611eab8261223a565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16611ed5836119ce565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611f00848484846122a4565b6001811115611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b906137d6565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f8b57611f86816122aa565b611fca565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611fc957611fc885826122f3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361200c5761200781612460565b61204b565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461204a576120498482612531565b5b5b5050505050565b50505050565b61206283836125b0565b61206f60008484846120b3565b6120ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a590613744565b60405180910390fd5b505050565b60006120d48473ffffffffffffffffffffffffffffffffffffffff166127cd565b1561222d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120fd61157f565b8786866040518563ffffffff1660e01b815260040161211f949392919061384b565b6020604051808303816000875af192505050801561215b57506040513d601f19601f8201168201806040525081019061215891906138ac565b60015b6121dd573d806000811461218b576040519150601f19603f3d011682016040523d82523d6000602084013e612190565b606091505b5060008151036121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc90613744565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612232565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161230084610a7f565b61230a91906138d9565b90506000600760008481526020019081526020016000205490508181146123ef576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061247491906138d9565b90506000600960008481526020019081526020016000205490506000600883815481106124a4576124a36130ed565b5b9060005260206000200154905080600883815481106124c6576124c56130ed565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806125155761251461390d565b5b6001900381819060005260206000200160009055905550505050565b600061253c83610a7f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361261f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261690613988565b60405180910390fd5b61262881611eb3565b15612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f906139f4565b60405180910390fd5b612676600083836001611ef4565b61267f81611eb3565b156126bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b6906139f4565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127c9600083836001612052565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61283981612804565b811461284457600080fd5b50565b60008135905061285681612830565b92915050565b600060208284031215612872576128716127fa565b5b600061288084828501612847565b91505092915050565b60008115159050919050565b61289e81612889565b82525050565b60006020820190506128b96000830184612895565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128ea826128bf565b9050919050565b6128fa816128df565b82525050565b600060208201905061291560008301846128f1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561295557808201518184015260208101905061293a565b83811115612964576000848401525b50505050565b6000601f19601f8301169050919050565b60006129868261291b565b6129908185612926565b93506129a0818560208601612937565b6129a98161296a565b840191505092915050565b600060208201905081810360008301526129ce818461297b565b905092915050565b6000819050919050565b6129e9816129d6565b81146129f457600080fd5b50565b600081359050612a06816129e0565b92915050565b600060208284031215612a2257612a216127fa565b5b6000612a30848285016129f7565b91505092915050565b612a42816128df565b8114612a4d57600080fd5b50565b600081359050612a5f81612a39565b92915050565b60008060408385031215612a7c57612a7b6127fa565b5b6000612a8a85828601612a50565b9250506020612a9b858286016129f7565b9150509250929050565b612aae816129d6565b82525050565b6000602082019050612ac96000830184612aa5565b92915050565b600080600060608486031215612ae857612ae76127fa565b5b6000612af686828701612a50565b9350506020612b0786828701612a50565b9250506040612b18868287016129f7565b9150509250925092565b600060208284031215612b3857612b376127fa565b5b6000612b4684828501612a50565b91505092915050565b612b5881612889565b8114612b6357600080fd5b50565b600081359050612b7581612b4f565b92915050565b60008060408385031215612b9257612b916127fa565b5b6000612ba085828601612a50565b9250506020612bb185828601612b66565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bfd8261296a565b810181811067ffffffffffffffff82111715612c1c57612c1b612bc5565b5b80604052505050565b6000612c2f6127f0565b9050612c3b8282612bf4565b919050565b600067ffffffffffffffff821115612c5b57612c5a612bc5565b5b612c648261296a565b9050602081019050919050565b82818337600083830152505050565b6000612c93612c8e84612c40565b612c25565b905082815260208101848484011115612caf57612cae612bc0565b5b612cba848285612c71565b509392505050565b600082601f830112612cd757612cd6612bbb565b5b8135612ce7848260208601612c80565b91505092915050565b60008060008060808587031215612d0a57612d096127fa565b5b6000612d1887828801612a50565b9450506020612d2987828801612a50565b9350506040612d3a878288016129f7565b925050606085013567ffffffffffffffff811115612d5b57612d5a6127ff565b5b612d6787828801612cc2565b91505092959194509250565b60008060408385031215612d8a57612d896127fa565b5b6000612d9885828601612a50565b9250506020612da985828601612a50565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dfa57607f821691505b602082108103612e0d57612e0c612db3565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e6f602183612926565b9150612e7a82612e13565b604082019050919050565b60006020820190508181036000830152612e9e81612e62565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000612f01603d83612926565b9150612f0c82612ea5565b604082019050919050565b60006020820190508181036000830152612f3081612ef4565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000612f93602d83612926565b9150612f9e82612f37565b604082019050919050565b60006020820190508181036000830152612fc281612f86565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613025602b83612926565b915061303082612fc9565b604082019050919050565b6000602082019050818103600083015261305481613018565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006130b7602c83612926565b91506130c28261305b565b604082019050919050565b600060208201905081810360008301526130e6816130aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b60006131328261291b565b61313c818561311c565b935061314c818560208601612937565b80840191505092915050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b600061318e60018361311c565b915061319982613158565b600182019050919050565b60006131b08286613127565b91506131bb82613181565b91506131c78285613127565b91506131d282613181565b91506131de8284613127565b9150819050949350505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613221601883612926565b915061322c826131eb565b602082019050919050565b6000602082019050818103600083015261325081613214565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006132b3602983612926565b91506132be82613257565b604082019050919050565b600060208201905081810360008301526132e2816132a6565b9050919050565b7f4f7074696d69736d4d696e7461626c654552433732313a206f6e6c792062726960008201527f6467652063616e2063616c6c20746869732066756e6374696f6e000000000000602082015250565b6000613345603a83612926565b9150613350826132e9565b604082019050919050565b6000602082019050818103600083015261337481613338565b9050919050565b60006133878285613127565b91506133938284613127565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133d9826129d6565b91506133e4836129d6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561341d5761341c61339f565b5b828202905092915050565b6000613433826129d6565b915061343e836129d6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134735761347261339f565b5b828201905092915050565b6000613489826129d6565b91506000820361349c5761349b61339f565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006134dd602083612926565b91506134e8826134a7565b602082019050919050565b6000602082019050818103600083015261350c816134d0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061359e602583612926565b91506135a982613542565b604082019050919050565b600060208201905081810360008301526135cd81613591565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613630602483612926565b915061363b826135d4565b604082019050919050565b6000602082019050818103600083015261365f81613623565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061369c601983612926565b91506136a782613666565b602082019050919050565b600060208201905081810360008301526136cb8161368f565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061372e603283612926565b9150613739826136d2565b604082019050919050565b6000602082019050818103600083015261375d81613721565b9050919050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b60006137c0603583612926565b91506137cb82613764565b604082019050919050565b600060208201905081810360008301526137ef816137b3565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061381d826137f6565b6138278185613801565b9350613837818560208601612937565b6138408161296a565b840191505092915050565b600060808201905061386060008301876128f1565b61386d60208301866128f1565b61387a6040830185612aa5565b818103606083015261388c8184613812565b905095945050505050565b6000815190506138a681612830565b92915050565b6000602082840312156138c2576138c16127fa565b5b60006138d084828501613897565b91505092915050565b60006138e4826129d6565b91506138ef836129d6565b9250828210156139025761390161339f565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613972602083612926565b915061397d8261393c565b602082019050919050565b600060208201905081810360008301526139a181613965565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006139de601c83612926565b91506139e9826139a8565b602082019050919050565b60006020820190508181036000830152613a0d816139d1565b905091905056fea26469706673582212201756683e582d60d6c9d58bfa83e68967d49687a9bb6f838777d1392462f3b54f64736f6c634300080f00330000000000000000000000005f090550edb24813d4ff7eeaab4a6b81eea0e865