0x608060405234801561001057600080fd5b50615058806100206000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80638ad5310611610146578063b0c42ed8116100c3578063d547741f11610087578063d547741f14610710578063e3b898f51461072c578063e5be0ff41461074a578063eb12d61e14610768578063ec919f5814610784578063f8c8765e146107a257610253565b8063b0c42ed814610680578063b6b55f251461069c578063caa0f92a146106b8578063cf220d9b146106d6578063d21220a7146106f257610253565b8063983d27371161010a578063983d2737146105c25780639e67026c146105e0578063a217fddf14610610578063a58696cd1461062e578063b02c43d01461064a57610253565b80638ad53106146105085780639126a0751461052657806391d148541461054457806394cf795e146105745780639723fb6d1461059257610253565b806342f131c2116101d45780635ac159da116101985780635ac159da1461045457806364aff9ec14610470578063744a00e21461048c578063846279e7146104a8578063883b524f146104d857610253565b806342f131c2146103a057806344b8f7a9146103d05780634ddc8ebf146103ec5780634feb116b1461041c578063516be0f81461043857610253565b80632eb5c7601161021b5780632eb5c760146103105780632f2ff15d1461032e5780633455a9db1461034a57806336568abe1461036857806341f368af1461038457610253565b806301ffc9a7146102585780630dfe1681146102885780631820aa98146102a65780631a0ef727146102c4578063248a9ca3146102e0575b600080fd5b610272600480360381019061026d91906136b8565b6107be565b60405161027f9190613700565b60405180910390f35b610290610838565b60405161029d919061375c565b60405180910390f35b6102ae61085e565b6040516102bb9190613700565b60405180910390f35b6102de60048036038101906102d991906137ad565b610871565b005b6102fa60048036038101906102f59190613810565b610c52565b604051610307919061384c565b60405180910390f35b610318610c72565b6040516103259190613700565b60405180910390f35b61034860048036038101906103439190613893565b610c85565b005b610352610ca6565b60405161035f919061375c565b60405180910390f35b610382600480360381019061037d9190613893565b610ccc565b005b61039e600480360381019061039991906138d3565b610d4f565b005b6103ba60048036038101906103b591906138d3565b610dd4565b6040516103c79190613922565b60405180910390f35b6103ea60048036038101906103e591906137ad565b610df9565b005b610406600480360381019061040191906137ad565b610e6e565b6040516104139190613922565b60405180910390f35b610436600480360381019061043191906139ea565b610e86565b005b610452600480360381019061044d9190613a8a565b6110f6565b005b61046e600480360381019061046991906137ad565b61113e565b005b61048a60048036038101906104859190613ab7565b6114f4565b005b6104a660048036038101906104a19190613a8a565b61154f565b005b6104c260048036038101906104bd9190613b0a565b611597565b6040516104cf9190613922565b60405180910390f35b6104f260048036038101906104ed9190613b0a565b6115af565b6040516104ff9190613700565b60405180910390f35b610510611666565b60405161051d9190613922565b60405180910390f35b61052e61166c565b60405161053b9190613922565b60405180910390f35b61055e60048036038101906105599190613893565b611672565b60405161056b9190613700565b60405180910390f35b61057c6116dd565b6040516105899190613bf5565b60405180910390f35b6105ac60048036038101906105a791906137ad565b6116ee565b6040516105b99190613700565b60405180910390f35b6105ca61170e565b6040516105d7919061384c565b60405180910390f35b6105fa60048036038101906105f59190613b0a565b611732565b604051610607919061375c565b60405180910390f35b6106186117d7565b604051610625919061384c565b60405180910390f35b61064860048036038101906106439190613b0a565b6117de565b005b610664600480360381019061065f91906137ad565b611872565b6040516106779796959493929190613c17565b60405180910390f35b61069a600480360381019061069591906137ad565b6118e1565b005b6106b660048036038101906106b191906137ad565b611958565b005b6106c0612239565b6040516106cd9190613922565b60405180910390f35b6106f060048036038101906106eb91906137ad565b612243565b005b6106fa6122ba565b604051610707919061375c565b60405180910390f35b61072a60048036038101906107259190613893565b6122e0565b005b610734612301565b604051610741919061375c565b60405180910390f35b610752612327565b60405161075f9190613922565b60405180910390f35b610782600480360381019061077d9190613b0a565b61232d565b005b61078c6123df565b604051610799919061375c565b60405180910390f35b6107bc60048036038101906107b79190613c86565b612405565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108315750610830826126d5565b5b9050919050565b609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60a760009054906101000a900460ff1681565b600060a460008381526020019081526020016000206040518060e00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16151515158152505090508060c001511561097b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097290613d4a565b60405180910390fd5b6301e133808160a00151426109909190613d99565b106109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c790613e19565b60405180910390fd5b60008160800151426109e29190613d99565b9050620151808111610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613eab565b60405180910390fd5b4282608001818152505060018260c0019015159081151581525050610ad133609b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606460328660400151610a7e9190613ecb565b610a889190613f3c565b609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661273f909392919063ffffffff16565b610b4633609b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460600151609f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661273f909392919063ffffffff16565b8160a4600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555090505082610bff6127c8565b73ffffffffffffffffffffffffffffffffffffffff167fa5c1f57bdc88c2f5f476801b8751d0a619af6878b9dfe2662cd323d154de59a86001604051610c459190613700565b60405180910390a3505050565b600060656000838152602001908152602001600020600101549050919050565b609b60009054906101000a900460ff1681565b610c8e82610c52565b610c97816127d0565b610ca183836127e4565b505050565b609b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cd46127c8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3890613fdf565b60405180910390fd5b610d4b82826128c5565b5050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c610d79816127d0565b8160a360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610dc89190613fff565b92505081905550505050565b60a1602052816000526040600020602052806000526040600020600091509150505481565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c610e23816127d0565b816098819055507f6390ad885d33ab99429bfed7e681df33e0567d6a3bbbcc2ca9c39303c85fbe8c610e536127c8565b83604051610e62929190614033565b60405180910390a15050565b60a06020528060005260406000206000915090505481565b60a26000846fffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef0906140ce565b60405180910390fd5b83655af3107a400011158015610f1e57506dffffffffffffffffffffffffffff801684105b610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f549061413a565b60405180910390fd5b600160a26000856fffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600030609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338787604051602001610fd8959493929190614169565b60405160208183030381529060405280519060200120905061100881848460a56129a7909392919063ffffffff16565b6110553386609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166129f89092919063ffffffff16565b609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846fffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2c45ac829d8f8037110218ea5264cda8453389da5e75ce1c9850ce0113352a3f886040516110e79190613922565b60405180910390a45050505050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611120816127d0565b81609b60006101000a81548160ff0219169083151502179055505050565b600060a460008381526020019081526020016000206040518060e00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16151515158152505090508060c00151611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90613d4a565b60405180910390fd5b61124f6127c8565b73ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b790614208565b60405180910390fd5b620151808160800151426112d49190613d99565b11611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90613eab565b60405180910390fd5b4281608001818152505060008160c0019015159081151581525050611398336064603284604001516113469190613ecb565b6113509190613f3c565b609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166129f89092919063ffffffff16565b6113e9338260600151609f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166129f89092919063ffffffff16565b8060a4600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff021916908315150217905550905050816114a26127c8565b73ffffffffffffffffffffffffffffffffffffffff167fa5c1f57bdc88c2f5f476801b8751d0a619af6878b9dfe2662cd323d154de59a860006040516114e89190613700565b60405180910390a35050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c61151e816127d0565b61154983838673ffffffffffffffffffffffffffffffffffffffff166129f89092919063ffffffff16565b50505050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611579816127d0565b8160a760006101000a81548160ff0219169083151502179055505050565b60a36020528060005260406000206000915090505481565b60007f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c6115db816127d0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361164a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116419061429a565b60405180910390fd5b61165e8360a5612a7e90919063ffffffff16565b915050919050565b60995481565b60975481565b60006065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606116e960a5612aae565b905090565b60a26020528060005260406000206000915054906101000a900460ff1681565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c81565b6000609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e67026c836040518263ffffffff1660e01b815260040161178f919061375c565b602060405180830381865afa1580156117ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d091906142cf565b9050919050565b6000801b81565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611808816127d0565b8173ffffffffffffffffffffffffffffffffffffffff16609b60019054906101000a905050507ffd5a191eeee6a74a5073db0d192a8d797fc96f95fac71268950b1adc8981774e6118576127c8565b836040516118669291906142fc565b60405180910390a15050565b60a46020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050154908060060160009054906101000a900460ff16905087565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c61190b816127d0565b816099819055507fc0997bc6d13153ceb2cd761327238a3abc6f4bc200edff68aa3bf1fbe98f785c61193b6127c8565b60975460405161194c929190614033565b60405180910390a15050565b80609b60009054906101000a900460ff166119a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199f90614371565b60405180910390fd5b6000151560a760009054906101000a900460ff1615151480611a215750600060a160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611a10612acf565b815260200190815260200160002054145b611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a57906143dd565b60405180910390fd5b6000609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e67026c611aa86127c8565b6040518263ffffffff1660e01b8152600401611ac4919061375c565b602060405180830381865afa158015611ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0591906142cf565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d90614449565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663033768c56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1e91906142cf565b73ffffffffffffffffffffffffffffffffffffffff161480611c7f5750600060a360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb5906144b5565b60405180910390fd5b609854821015611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa90614521565b60405180910390fd5b6099548260a06000611d13612acf565b81526020019081526020016000206000828254611d309190613fff565b9250508190551115611d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6e9061458d565b60405180910390fd5b609a6000815480929190611d8a906145ad565b91905055506000609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a7521055336040518263ffffffff1660e01b8152600401611def919061375c565b602060405180830381865afa158015611e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e30919061460a565b611ea0578073ffffffffffffffffffffffffffffffffffffffff166373d60fca336040518263ffffffff1660e01b8152600401611e6d919061375c565b600060405180830381600087803b158015611e8757600080fd5b505af1158015611e9b573d6000803e3d6000fd5b505050505b8360a360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eef9190613fff565b925050819055508360a160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611f40612acf565b81526020019081526020016000206000828254611f5d9190613fff565b92505081905550600061271060975486611f779190613ecb565b611f819190613f3c565b90506040518060e00160405280611f966127c8565b73ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018681526020018281526020014281526020014281526020016001151581525060a46000609a54815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff0219169083151502179055509050506120f03361dead606460328961209d9190613ecb565b6120a79190613f3c565b609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661273f909392919063ffffffff16565b61217933609b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660646032896121269190613ecb565b6121309190613f3c565b609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661273f909392919063ffffffff16565b6121ea33609b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683609f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661273f909392919063ffffffff16565b7f996a417e6461fc8f287ec9a6c2e9afb764a1d6fbdaa6570826ae99855b453aff609a546122166127c8565b87888560405161222a959493929190614637565b60405180910390a15050505050565b6000609a54905090565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c61226d816127d0565b816097819055507fc0997bc6d13153ceb2cd761327238a3abc6f4bc200edff68aa3bf1fbe98f785c61229d6127c8565b6097546040516122ae929190614033565b60405180910390a15050565b609f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122e982610c52565b6122f2816127d0565b6122fc83836128c5565b505050565b609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60985481565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c612357816127d0565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd906146fc565b60405180910390fd5b6123da8260a5612ae590919063ffffffff16565b505050565b609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060019054906101000a900460ff161590508080156124365750600160008054906101000a900460ff1660ff16105b80612463575061244530612b15565b1580156124625750600160008054906101000a900460ff1660ff16145b5b6124a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124999061478e565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156124df576001600060016101000a81548160ff0219169083151502179055505b6124e7612b38565b6124fb6000801b6124f66127c8565b612b89565b61252c7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c6125276127c8565b612b89565b81609b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084609d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083609e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082609f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061012c60978190555068056bc75e2d6310000060988190555069152d02c7e14af68000006099819055506001609b60006101000a81548160ff02191690831515021790555080156126ce5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516126c59190614800565b60405180910390a15b5050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127c2846323b872dd60e01b8585856040516024016127609392919061481b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b97565b50505050565b600033905090565b6127e1816127dc6127c8565b612c5f565b50565b6127ee8282611672565b6128c15760016065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506128666127c8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6128cf8282611672565b156129a35760006065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506129486127c8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6129b384848484612ce4565b6129f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e9906148c4565b60405180910390fd5b50505050565b612a798363a9059cbb60e01b8484604051602401612a17929190614033565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b97565b505050565b6000612aa6836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612d50565b905092915050565b60606000612abe83600001612e64565b905060608190508092505050919050565b60006201518042612ae09190613f3c565b905090565b6000612b0d836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612ec0565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16612b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7e90614956565b60405180910390fd5b565b612b9382826127e4565b5050565b6000612bf9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612f309092919063ffffffff16565b9050600081511480612c1b575080806020019051810190612c1a919061460a565b5b612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c51906149e8565b60405180910390fd5b505050565b612c698282611672565b612ce057612c7681612f48565b612c848360001c6020612f75565b604051602001612c95929190614b11565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd79190614b95565b60405180910390fd5b5050565b6000612d46612d378585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506131b1565b866131d890919063ffffffff16565b9050949350505050565b60008083600101600084815260200190815260200160002054905060008114612e58576000600182612d829190613d99565b9050600060018660000180549050612d9a9190613d99565b9050818114612e09576000866000018281548110612dbb57612dba614bb7565b5b9060005260206000200154905080876000018481548110612ddf57612dde614bb7565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480612e1d57612e1c614be6565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612e5e565b60009150505b92915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015612eb457602002820191906000526020600020905b815481526020019060010190808311612ea0575b50505050509050919050565b6000612ecc8383613208565b612f25578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612f2a565b600090505b92915050565b6060612f3f848460008561322b565b90509392505050565b6060612f6e8273ffffffffffffffffffffffffffffffffffffffff16601460ff16612f75565b9050919050565b606060006002836002612f889190613ecb565b612f929190613fff565b67ffffffffffffffff811115612fab57612faa614c15565b5b6040519080825280601f01601f191660200182016040528015612fdd5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061301557613014614bb7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061307957613078614bb7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026130b99190613ecb565b6130c39190613fff565b90505b6001811115613163577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061310557613104614bb7565b5b1a60f81b82828151811061311c5761311b614bb7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061315c90614c44565b90506130c6565b50600084146131a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319e90614cb9565b60405180910390fd5b8091505092915050565b60008060006131c085856132f8565b915091506131cd81613349565b819250505092915050565b6000613200836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613208565b905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b606082471015613270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326790614d4b565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516132999190614db2565b60006040518083038185875af1925050503d80600081146132d6576040519150601f19603f3d011682016040523d82523d6000602084013e6132db565b606091505b50915091506132ec878383876134af565b92505050949350505050565b60008060418351036133395760008060006020860151925060408601519150606086015160001a905061332d87828585613524565b94509450505050613342565b60006002915091505b9250929050565b6000600481111561335d5761335c614dc9565b5b8160048111156133705761336f614dc9565b5b03156134ac576001600481111561338a57613389614dc9565b5b81600481111561339d5761339c614dc9565b5b036133dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d490614e44565b60405180910390fd5b600260048111156133f1576133f0614dc9565b5b81600481111561340457613403614dc9565b5b03613444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343b90614eb0565b60405180910390fd5b6003600481111561345857613457614dc9565b5b81600481111561346b5761346a614dc9565b5b036134ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a290614f42565b60405180910390fd5b5b50565b60608315613511576000835103613509576134c985612b15565b613508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ff90614fae565b60405180910390fd5b5b82905061351c565b61351b8383613606565b5b949350505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561355f5760006003915091506135fd565b6000600187878787604051600081526020016040526040516135849493929190614fdd565b6020604051602081039080840390855afa1580156135a6573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036135f4576000600192509250506135fd565b80600092509250505b94509492505050565b6000825111156136195781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364d9190614b95565b60405180910390fd5b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61369581613660565b81146136a057600080fd5b50565b6000813590506136b28161368c565b92915050565b6000602082840312156136ce576136cd613656565b5b60006136dc848285016136a3565b91505092915050565b60008115159050919050565b6136fa816136e5565b82525050565b600060208201905061371560008301846136f1565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137468261371b565b9050919050565b6137568161373b565b82525050565b6000602082019050613771600083018461374d565b92915050565b6000819050919050565b61378a81613777565b811461379557600080fd5b50565b6000813590506137a781613781565b92915050565b6000602082840312156137c3576137c2613656565b5b60006137d184828501613798565b91505092915050565b6000819050919050565b6137ed816137da565b81146137f857600080fd5b50565b60008135905061380a816137e4565b92915050565b60006020828403121561382657613825613656565b5b6000613834848285016137fb565b91505092915050565b613846816137da565b82525050565b6000602082019050613861600083018461383d565b92915050565b6138708161373b565b811461387b57600080fd5b50565b60008135905061388d81613867565b92915050565b600080604083850312156138aa576138a9613656565b5b60006138b8858286016137fb565b92505060206138c98582860161387e565b9150509250929050565b600080604083850312156138ea576138e9613656565b5b60006138f88582860161387e565b925050602061390985828601613798565b9150509250929050565b61391c81613777565b82525050565b60006020820190506139376000830184613913565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6139628161393d565b811461396d57600080fd5b50565b60008135905061397f81613959565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126139aa576139a9613985565b5b8235905067ffffffffffffffff8111156139c7576139c661398a565b5b6020830191508360018202830111156139e3576139e261398f565b5b9250929050565b60008060008060608587031215613a0457613a03613656565b5b6000613a1287828801613798565b9450506020613a2387828801613970565b935050604085013567ffffffffffffffff811115613a4457613a4361365b565b5b613a5087828801613994565b925092505092959194509250565b613a67816136e5565b8114613a7257600080fd5b50565b600081359050613a8481613a5e565b92915050565b600060208284031215613aa057613a9f613656565b5b6000613aae84828501613a75565b91505092915050565b600080600060608486031215613ad057613acf613656565b5b6000613ade8682870161387e565b9350506020613aef8682870161387e565b9250506040613b0086828701613798565b9150509250925092565b600060208284031215613b2057613b1f613656565b5b6000613b2e8482850161387e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b6c8161373b565b82525050565b6000613b7e8383613b63565b60208301905092915050565b6000602082019050919050565b6000613ba282613b37565b613bac8185613b42565b9350613bb783613b53565b8060005b83811015613be8578151613bcf8882613b72565b9750613bda83613b8a565b925050600181019050613bbb565b5085935050505092915050565b60006020820190508181036000830152613c0f8184613b97565b905092915050565b600060e082019050613c2c600083018a61374d565b613c396020830189613913565b613c466040830188613913565b613c536060830187613913565b613c606080830186613913565b613c6d60a0830185613913565b613c7a60c08301846136f1565b98975050505050505050565b60008060008060808587031215613ca057613c9f613656565b5b6000613cae8782880161387e565b9450506020613cbf8782880161387e565b9350506040613cd08782880161387e565b9250506060613ce18782880161387e565b91505092959194509250565b600082825260208201905092915050565b7f5374616b696e67506f6f6c323a207374617465206572726f7200000000000000600082015250565b6000613d34601983613ced565b9150613d3f82613cfe565b602082019050919050565b60006020820190508181036000830152613d6381613d27565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613da482613777565b9150613daf83613777565b9250828203905081811115613dc757613dc6613d6a565b5b92915050565b7f5374616b696e67506f6f6c323a206f72646572206973206f7665720000000000600082015250565b6000613e03601b83613ced565b9150613e0e82613dcd565b602082019050919050565b60006020820190508181036000830152613e3281613df6565b9050919050565b7f5374616b696e67506f6f6c323a2063616c6c20746f6f206672657175656e746c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e95602183613ced565b9150613ea082613e39565b604082019050919050565b60006020820190508181036000830152613ec481613e88565b9050919050565b6000613ed682613777565b9150613ee183613777565b9250828202613eef81613777565b91508282048414831517613f0657613f05613d6a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f4782613777565b9150613f5283613777565b925082613f6257613f61613f0d565b5b828204905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000613fc9602f83613ced565b9150613fd482613f6d565b604082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b600061400a82613777565b915061401583613777565b925082820190508082111561402d5761402c613d6a565b5b92915050565b6000604082019050614048600083018561374d565b6140556020830184613913565b9392505050565b7f5374616b696e67506f6f6c323a206e6f6e636520697320616c7265616479206560008201527f7869737473000000000000000000000000000000000000000000000000000000602082015250565b60006140b8602583613ced565b91506140c38261405c565b604082019050919050565b600060208201905081810360008301526140e7816140ab565b9050919050565b7f414d4f554e540000000000000000000000000000000000000000000000000000600082015250565b6000614124600683613ced565b915061412f826140ee565b602082019050919050565b6000602082019050818103600083015261415381614117565b9050919050565b6141638161393d565b82525050565b600060a08201905061417e600083018861374d565b61418b602083018761374d565b614198604083018661374d565b6141a56060830185613913565b6141b2608083018461415a565b9695505050505050565b7f5374616b696e67506f6f6c323a206e6f7420796f7572206f7264657200000000600082015250565b60006141f2601c83613ced565b91506141fd826141bc565b602082019050919050565b60006020820190508181036000830152614221816141e5565b9050919050565b7f5374616b696e67506f6f6c323a207369676e657220697320746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b6000614284602883613ced565b915061428f82614228565b604082019050919050565b600060208201905081810360008301526142b381614277565b9050919050565b6000815190506142c981613867565b92915050565b6000602082840312156142e5576142e4613656565b5b60006142f3848285016142ba565b91505092915050565b6000604082019050614311600083018561374d565b61431e602083018461374d565b9392505050565b7f4e6f74204f70656e000000000000000000000000000000000000000000000000600082015250565b600061435b600883613ced565b915061436682614325565b602082019050919050565b6000602082019050818103600083015261438a8161434e565b9050919050565b7f506c656467656420746f64617900000000000000000000000000000000000000600082015250565b60006143c7600d83613ced565b91506143d282614391565b602082019050919050565b600060208201905081810360008301526143f6816143ba565b9050919050565b7f4d49535300000000000000000000000000000000000000000000000000000000600082015250565b6000614433600483613ced565b915061443e826143fd565b602082019050919050565b6000602082019050818103600083015261446281614426565b9050919050565b7f737570206e6f74207374616b696e670000000000000000000000000000000000600082015250565b600061449f600f83613ced565b91506144aa82614469565b602082019050919050565b600060208201905081810360008301526144ce81614492565b9050919050565b7f534d414c4c000000000000000000000000000000000000000000000000000000600082015250565b600061450b600583613ced565b9150614516826144d5565b602082019050919050565b6000602082019050818103600083015261453a816144fe565b9050919050565b7f4558434545444544000000000000000000000000000000000000000000000000600082015250565b6000614577600883613ced565b915061458282614541565b602082019050919050565b600060208201905081810360008301526145a68161456a565b9050919050565b60006145b882613777565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ea576145e9613d6a565b5b600182019050919050565b60008151905061460481613a5e565b92915050565b6000602082840312156146205761461f613656565b5b600061462e848285016145f5565b91505092915050565b600060a08201905061464c6000830188613913565b614659602083018761374d565b6146666040830186613913565b6146736060830185613913565b6146806080830184613913565b9695505050505050565b7f5374616b696e67506f6f6c323a2076616c20697320746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006146e6602583613ced565b91506146f18261468a565b604082019050919050565b60006020820190508181036000830152614715816146d9565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000614778602e83613ced565b91506147838261471c565b604082019050919050565b600060208201905081810360008301526147a78161476b565b9050919050565b6000819050919050565b600060ff82169050919050565b6000819050919050565b60006147ea6147e56147e0846147ae565b6147c5565b6147b8565b9050919050565b6147fa816147cf565b82525050565b600060208201905061481560008301846147f1565b92915050565b6000606082019050614830600083018661374d565b61483d602083018561374d565b61484a6040830184613913565b949350505050565b7f5369676e6174757265436865636b65723a20496e76616c6964207369676e617460008201527f7572650000000000000000000000000000000000000000000000000000000000602082015250565b60006148ae602383613ced565b91506148b982614852565b604082019050919050565b600060208201905081810360008301526148dd816148a1565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000614940602b83613ced565b915061494b826148e4565b604082019050919050565b6000602082019050818103600083015261496f81614933565b9050919050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006149d2602a83613ced565b91506149dd82614976565b604082019050919050565b60006020820190508181036000830152614a01816149c5565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614a49601783614a08565b9150614a5482614a13565b601782019050919050565b600081519050919050565b60005b83811015614a88578082015181840152602081019050614a6d565b60008484015250505050565b6000614a9f82614a5f565b614aa98185614a08565b9350614ab9818560208601614a6a565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614afb601183614a08565b9150614b0682614ac5565b601182019050919050565b6000614b1c82614a3c565b9150614b288285614a94565b9150614b3382614aee565b9150614b3f8284614a94565b91508190509392505050565b6000601f19601f8301169050919050565b6000614b6782614a5f565b614b718185613ced565b9350614b81818560208601614a6a565b614b8a81614b4b565b840191505092915050565b60006020820190508181036000830152614baf8184614b5c565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000614c4f82613777565b915060008203614c6257614c61613d6a565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614ca3602083613ced565b9150614cae82614c6d565b602082019050919050565b60006020820190508181036000830152614cd281614c96565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614d35602683613ced565b9150614d4082614cd9565b604082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b600081519050919050565b600081905092915050565b6000614d8c82614d6b565b614d968185614d76565b9350614da6818560208601614a6a565b80840191505092915050565b6000614dbe8284614d81565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000614e2e601883613ced565b9150614e3982614df8565b602082019050919050565b60006020820190508181036000830152614e5d81614e21565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000614e9a601f83613ced565b9150614ea582614e64565b602082019050919050565b60006020820190508181036000830152614ec981614e8d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f2c602283613ced565b9150614f3782614ed0565b604082019050919050565b60006020820190508181036000830152614f5b81614f1f565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614f98601d83613ced565b9150614fa382614f62565b602082019050919050565b60006020820190508181036000830152614fc781614f8b565b9050919050565b614fd7816147b8565b82525050565b6000608082019050614ff2600083018761383d565b614fff6020830186614fce565b61500c604083018561383d565b615019606083018461383d565b9594505050505056fea26469706673582212208cf4ba21a57d17dd2b3b5e71364447f12e8b09bef8cb208b039beb8e8fd03a1764736f6c63430008120033