608060405234801561000f575f80fd5b506040518060400160405280601481526020017f41756374696f6e2043727970746f47656e6975730000000000000000000000008152506040518060400160405280600381526020017f4155430000000000000000000000000000000000000000000000000000000000815250815f908161008a919061031c565b50806001908161009a919061031c565b5050503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103eb565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061015d57607f821691505b6020821081036101705761016f610119565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101d27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610197565b6101dc8683610197565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61022061021b610216846101f4565b6101fd565b6101f4565b9050919050565b5f819050919050565b61023983610206565b61024d61024582610227565b8484546101a3565b825550505050565b5f90565b610261610255565b61026c818484610230565b505050565b5b8181101561028f576102845f82610259565b600181019050610272565b5050565b601f8211156102d4576102a581610176565b6102ae84610188565b810160208510156102bd578190505b6102d16102c985610188565b830182610271565b50505b505050565b5f82821c905092915050565b5f6102f45f19846008026102d9565b1980831691505092915050565b5f61030c83836102e5565b9150826002028217905092915050565b610325826100e2565b67ffffffffffffffff81111561033e5761033d6100ec565b5b6103488254610146565b610353828285610293565b5f60209050601f831160018114610384575f8415610372578287015190505b61037c8582610301565b8655506103e3565b601f19841661039286610176565b5f5b828110156103b957848901518255600182019150602085019450602081019050610394565b868310156103d657848901516103d2601f8916826102e5565b8355505b6001600288020188555050505b505050505050565b614a9f806103f85f395ff3fe6080604052600436106101cc575f3560e01c806361e2db55116100f6578063b88d4fde11610094578063caf2976511610063578063caf2976514610671578063cbd2bdfd1461069b578063d63d4af0146106c5578063e985e9c514610701576101cc565b8063b88d4fde146105c9578063b9a2de3a146105f1578063c2db2c4214610619578063c87b56dd14610635576101cc565b80638da5cb5b116100d05780638da5cb5b1461052357806395d89b411461054d578063a22cb46514610577578063ae1911fc1461059f576101cc565b806361e2db55146104835780636352211e146104ab57806370a08231146104e7576101cc565b80632a5c792a1161016e57806342842e0e1161013d57806342842e0e146103d3578063454a2ab3146103fb578063571a26a0146104175780635b0605301461045b576101cc565b80632a5c792a146103165780633ccfd60b146103405780633f8994391461035657806341abf57114610392576101cc565b8063095ea7b3116101aa578063095ea7b31461027257806318160ddd1461029a57806323b872dd146102c457806327213345146102ec576101cc565b806301ffc9a7146101d057806306fdde031461020c578063081812fc14610236575b5f80fd5b3480156101db575f80fd5b506101f660048036038101906101f19190613693565b61073d565b60405161020391906136d8565b60405180910390f35b348015610217575f80fd5b5061022061079d565b60405161022d9190613761565b60405180910390f35b348015610241575f80fd5b5061025c600480360381019061025791906137b4565b61082c565b604051610269919061381e565b60405180910390f35b34801561027d575f80fd5b5061029860048036038101906102939190613861565b610847565b005b3480156102a5575f80fd5b506102ae61085d565b6040516102bb91906138ae565b60405180910390f35b3480156102cf575f80fd5b506102ea60048036038101906102e591906138c7565b610863565b005b3480156102f7575f80fd5b50610300610962565b60405161030d91906138ae565b60405180910390f35b348015610321575f80fd5b5061032a610968565b6040516103379190613ac5565b60405180910390f35b34801561034b575f80fd5b50610354610b9d565b005b348015610361575f80fd5b5061037c60048036038101906103779190613ae5565b610c5e565b6040516103899190613ca3565b60405180910390f35b34801561039d575f80fd5b506103b860048036038101906103b391906137b4565b610fbb565b6040516103ca96959493929190613cc3565b60405180910390f35b3480156103de575f80fd5b506103f960048036038101906103f491906138c7565b61110b565b005b610415600480360381019061041091906137b4565b61112a565b005b348015610422575f80fd5b5061043d600480360381019061043891906137b4565b61132f565b60405161045299989796959493929190613d30565b60405180910390f35b348015610466575f80fd5b50610481600480360381019061047c9190613ef5565b6114cf565b005b34801561048e575f80fd5b506104a960048036038101906104a49190613f7d565b6115e3565b005b3480156104b6575f80fd5b506104d160048036038101906104cc91906137b4565b611819565b6040516104de919061381e565b60405180910390f35b3480156104f2575f80fd5b5061050d60048036038101906105089190613ae5565b61182a565b60405161051a91906138ae565b60405180910390f35b34801561052e575f80fd5b506105376118e0565b604051610544919061381e565b60405180910390f35b348015610558575f80fd5b50610561611905565b60405161056e9190613761565b60405180910390f35b348015610582575f80fd5b5061059d60048036038101906105989190614043565b611995565b005b3480156105aa575f80fd5b506105b36119ab565b6040516105c091906138ae565b60405180910390f35b3480156105d4575f80fd5b506105ef60048036038101906105ea919061411f565b6119b0565b005b3480156105fc575f80fd5b50610617600480360381019061061291906137b4565b6119cd565b005b610633600480360381019061062e91906137b4565b611c7a565b005b348015610640575f80fd5b5061065b600480360381019061065691906137b4565b611dea565b6040516106689190613761565b60405180910390f35b34801561067c575f80fd5b50610685611ef5565b60405161069291906138ae565b60405180910390f35b3480156106a6575f80fd5b506106af611efa565b6040516106bc9190613ca3565b60405180910390f35b3480156106d0575f80fd5b506106eb60048036038101906106e69190613ae5565b6121e4565b6040516106f89190613ac5565b60405180910390f35b34801561070c575f80fd5b506107276004803603810190610722919061419f565b61248c565b60405161073491906136d8565b60405180910390f35b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061079657506107958261251a565b5b9050919050565b60605f80546107ab9061420a565b80601f01602080910402602001604051908101604052809291908181526020018280546107d79061420a565b80156108225780601f106107f957610100808354040283529160200191610822565b820191905f5260205f20905b81548152906001019060200180831161080557829003601f168201915b5050505050905090565b5f610836826125fb565b5061084082612681565b9050919050565b61085982826108546126ba565b6126c1565b5050565b60085481565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108d3575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016108ca919061381e565b60405180910390fd5b5f6108e683836108e16126ba565b6126d3565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461095c578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016109539392919061423a565b60405180910390fd5b50505050565b60095481565b60605f60095467ffffffffffffffff81111561098757610986613dd1565b5b6040519080825280602002602001820160405280156109c057816020015b6109ad613586565b8152602001906001900390816109a55790505b5090505f6009541115610b96575f5b60016009546109de919061429c565b8161ffff1611610b9457600b5f8261ffff1681526020019081526020015f206040518060c00160405290815f8201548152602001600182018054610a219061420a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4d9061420a565b8015610a985780601f10610a6f57610100808354040283529160200191610a98565b820191905f5260205f20905b815481529060010190602001808311610a7b57829003601f168201915b5050505050815260200160028201548152602001600382018054610abb9061420a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae79061420a565b8015610b325780601f10610b0957610100808354040283529160200191610b32565b820191905f5260205f20905b815481529060010190602001808311610b1557829003601f168201915b50505050508152602001600482015f9054906101000a900460ff16151515158152602001600582015481525050828261ffff1681518110610b7657610b756142cf565b5b60200260200101819052508080610b8c90614309565b9150506109cf565b505b8091505090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610c01573d5f803e3d5ffd5b507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436460075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1647604051610c54929190614332565b60405180910390a1565b60605f610c6a8361182a565b90505f8167ffffffffffffffff811115610c8757610c86613dd1565b5b604051908082528060200260200182016040528015610cc057816020015b610cad6135ba565b815260200190600190039081610ca55790505b5090505f821115610fb1575f805b6001600854610cdd919061429c565b8161ffff1611610fae575f610d08600a5f8461ffff1681526020019081526020015f205f0154611819565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f9a57600a5f8361ffff1681526020019081526020015f20604051806101200160405290815f8201548152602001600182018054610d779061420a565b80601f0160208091040260200160405190810160405280929190818152602001828054610da39061420a565b8015610dee5780601f10610dc557610100808354040283529160200191610dee565b820191905f5260205f20905b815481529060010190602001808311610dd157829003601f168201915b50505050508152602001600282018054610e079061420a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e339061420a565b8015610e7e5780601f10610e5557610100808354040283529160200191610e7e565b820191905f5260205f20905b815481529060010190602001808311610e6157829003601f168201915b50505050508152602001600382015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820154815260200160058201548152602001600682015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160078201548152602001600882015f9054906101000a900460ff161515151581525050848461ffff1681518110610f8057610f7f6142cf565b5b60200260200101819052508280610f9690614309565b9350505b508080610fa690614309565b915050610cce565b50505b8092505050919050565b600b602052805f5260405f205f91509050805f015490806001018054610fe09061420a565b80601f016020809104026020016040519081016040528092919081815260200182805461100c9061420a565b80156110575780601f1061102e57610100808354040283529160200191611057565b820191905f5260205f20905b81548152906001019060200180831161103a57829003601f168201915b5050505050908060020154908060030180546110729061420a565b80601f016020809104026020016040519081016040528092919081815260200182805461109e9061420a565b80156110e95780601f106110c0576101008083540402835291602001916110e9565b820191905f5260205f20905b8154815290600101906020018083116110cc57829003601f168201915b505050505090806004015f9054906101000a900460ff16908060050154905086565b61112583838360405180602001604052805f8152506119b0565b505050565b600a5f8281526020019081526020015f20600501543411611180576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611177906143c9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f8381526020019081526020015f206006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127257600a5f8281526020019081526020015f206006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a5f8481526020019081526020015f206005015490811502906040515f60405180830381858888f19350505050158015611270573d5f803e3d5ffd5b505b34600a5f8381526020019081526020015f206005018190555033600a5f8381526020019081526020015f206006015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16817f558a0d5d5468d74b0db24c74eb348b42271c2ebb4c9e953ced38aaed95fa43613460405161132491906138ae565b60405180910390a350565b600a602052805f5260405f205f91509050805f0154908060010180546113549061420a565b80601f01602080910402602001604051908101604052809291908181526020018280546113809061420a565b80156113cb5780601f106113a2576101008083540402835291602001916113cb565b820191905f5260205f20905b8154815290600101906020018083116113ae57829003601f168201915b5050505050908060020180546113e09061420a565b80601f016020809104026020016040519081016040528092919081815260200182805461140c9061420a565b80156114575780601f1061142e57610100808354040283529160200191611457565b820191905f5260205f20905b81548152906001019060200180831161143a57829003601f168201915b505050505090806003015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806004015490806005015490806006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806007015490806008015f9054906101000a900460ff16905089565b5f60095490505f8490506040518060c001604052808381526020018581526020018481526020018281526020016001151581526020015f815250600b5f8481526020019081526020015f205f820151815f015560208201518160010190816115379190614584565b506040820151816002015560608201518160030190816115579190614584565b506080820151816004015f6101000a81548160ff02191690831515021790555060a0820151816005015590505061158e33836128de565b61159882826129d1565b60095f8154809291906115aa90614653565b9190505550817f0b0e1efe43e1d56f854d6465fc899ed56ba06463eebf7e2ba402df15e6ee7e7e60405160405180910390a25050505050565b5f60085490505f8590506040518061012001604052808381526020018681526020018281526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018581526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020016116628542612a2b90919063ffffffff16565b81526020015f1515815250600a5f8481526020019081526020015f205f820151815f0155602082015181600101908161169b9190614584565b5060408201518160020190816116b19190614584565b506060820151816003015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816004015560a0820151816005015560c0820151816006015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160070155610100820151816008015f6101000a81548160ff02191690831515021790555090505061178933836128de565b61179382826129d1565b60085f8154809291906117a590614653565b91905055503373ffffffffffffffffffffffffffffffffffffffff16827f180b43a9f50a1f2dc5fa0d10afda303d033bc082b2dabad3465ad821abf5fab48787600a5f8881526020019081526020015f20600701546040516118099392919061469a565b60405180910390a3505050505050565b5f611823826125fb565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361189b575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401611892919061381e565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600180546119149061420a565b80601f01602080910402602001604051908101604052809291908181526020018280546119409061420a565b801561198b5780601f106119625761010080835404028352916020019161198b565b820191905f5260205f20905b81548152906001019060200180831161196e57829003601f168201915b5050505050905090565b6119a76119a06126ba565b8383612a88565b5050565b600581565b6119bb848484610863565b6119c784848484612bf1565b50505050565b600a5f8281526020019081526020015f206008015f9054906101000a900460ff1615611a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2590614720565b60405180910390fd5b6001600a5f8381526020019081526020015f206008015f6101000a81548160ff0219169083151502179055505f60646005600a5f8581526020019081526020015f2060050154611a7e919061473e565b611a8891906147ac565b90505f81600a5f8581526020019081526020015f2060050154611aab919061429c565b90505f73ffffffffffffffffffffffffffffffffffffffff16600a5f8581526020019081526020015f206006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c2557600a5f8481526020019081526020015f206003015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611b89573d5f803e3d5ffd5b50600a5f8481526020019081526020015f206006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16837fd2aa34a4fdbbc6dff6a3e56f46e0f3ae2a31d7785ff3487aa5c95c642acea501600a5f8781526020019081526020015f2060050154604051611c1891906138ae565b60405180910390a3611c75565b5f73ffffffffffffffffffffffffffffffffffffffff16837fd2aa34a4fdbbc6dff6a3e56f46e0f3ae2a31d7785ff3487aa5c95c642acea5015f604051611c6c9190614815565b60405180910390a35b505050565b600b5f8281526020019081526020015f206004015f9054906101000a900460ff16611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190614878565b60405180910390fd5b5f6064600534611cea919061473e565b611cf491906147ac565b90505f8134611d03919061429c565b9050611d0e83611819565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611d50573d5f803e3d5ffd5b50611d64611d5d84611819565b3385612da3565b42600b5f8581526020019081526020015f206005018190555034600b5f8581526020019081526020015f2060020181905550823373ffffffffffffffffffffffffffffffffffffffff167f3ceffd410054fdaed44f598ff5c1fb450658778e2241892da4aa646979dee61734604051611ddd91906138ae565b60405180910390a3505050565b6060611df5826125fb565b505f60065f8481526020019081526020015f208054611e139061420a565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3f9061420a565b8015611e8a5780601f10611e6157610100808354040283529160200191611e8a565b820191905f5260205f20905b815481529060010190602001808311611e6d57829003601f168201915b505050505090505f611e9a612f0b565b90505f815103611eae578192505050611ef0565b5f82511115611ee2578082604051602001611eca9291906148d0565b60405160208183030381529060405292505050611ef0565b611eeb84612f21565b925050505b919050565b606481565b60605f60085467ffffffffffffffff811115611f1957611f18613dd1565b5b604051908082528060200260200182016040528015611f5257816020015b611f3f6135ba565b815260200190600190039081611f375790505b5090505f60085411156121dd575f5b6001600854611f70919061429c565b8161ffff16116121db57600a5f8261ffff1681526020019081526020015f20604051806101200160405290815f8201548152602001600182018054611fb49061420a565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe09061420a565b801561202b5780601f106120025761010080835404028352916020019161202b565b820191905f5260205f20905b81548152906001019060200180831161200e57829003601f168201915b505050505081526020016002820180546120449061420a565b80601f01602080910402602001604051908101604052809291908181526020018280546120709061420a565b80156120bb5780601f10612092576101008083540402835291602001916120bb565b820191905f5260205f20905b81548152906001019060200180831161209e57829003601f168201915b50505050508152602001600382015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820154815260200160058201548152602001600682015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160078201548152602001600882015f9054906101000a900460ff161515151581525050828261ffff16815181106121bd576121bc6142cf565b5b602002602001018190525080806121d390614309565b915050611f61565b505b8091505090565b60605f6121f08361182a565b90505f8167ffffffffffffffff81111561220d5761220c613dd1565b5b60405190808252806020026020018201604052801561224657816020015b612233613586565b81526020019060019003908161222b5790505b5090505f821115612482575f805b6001600854612263919061429c565b8161ffff161161247f575f61228e600b5f8461ffff1681526020019081526020015f205f0154611819565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361246b57600b5f8361ffff1681526020019081526020015f206040518060c00160405290815f82015481526020016001820180546122fc9061420a565b80601f01602080910402602001604051908101604052809291908181526020018280546123289061420a565b80156123735780601f1061234a57610100808354040283529160200191612373565b820191905f5260205f20905b81548152906001019060200180831161235657829003601f168201915b50505050508152602001600282015481526020016003820180546123969061420a565b80601f01602080910402602001604051908101604052809291908181526020018280546123c29061420a565b801561240d5780601f106123e45761010080835404028352916020019161240d565b820191905f5260205f20905b8154815290600101906020018083116123f057829003601f168201915b50505050508152602001600482015f9054906101000a900460ff16151515158152602001600582015481525050848461ffff1681518110612451576124506142cf565b5b6020026020010181905250828061246790614309565b9350505b50808061247790614309565b915050612254565b50505b8092505050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125e457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806125f457506125f382612f87565b5b9050919050565b5f8061260683612ff0565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361267857826040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161266f91906138ae565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b6126ce8383836001613029565b505050565b5f806126de84612ff0565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461271f5761271e8184866131e8565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146127aa5761275e5f855f80613029565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461282957600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361294e575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612945919061381e565b60405180910390fd5b5f61295a83835f6126d3565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146129cc575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016129c3919061381e565b60405180910390fd5b505050565b8060065f8481526020019081526020015f2090816129ef9190614584565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce782604051612a1f91906138ae565b60405180910390a15050565b5f808284612a3991906148f3565b905083811015612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7590614970565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af857816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401612aef919061381e565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612be491906136d8565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115612d9d578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c346126ba565b8685856040518563ffffffff1660e01b8152600401612c5694939291906149e0565b6020604051808303815f875af1925050508015612c9157506040513d601f19601f82011682018060405250810190612c8e9190614a3e565b60015b612d12573d805f8114612cbf576040519150601f19603f3d011682016040523d82523d5f602084013e612cc4565b606091505b505f815103612d0a57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612d01919061381e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d9b57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612d92919061381e565b60405180910390fd5b505b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e13575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612e0a919061381e565b60405180910390fd5b5f612e1f83835f6126d3565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612e9157816040517f7e273289000000000000000000000000000000000000000000000000000000008152600401612e8891906138ae565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612f05578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401612efc9392919061423a565b60405180910390fd5b50505050565b606060405180602001604052805f815250905090565b6060612f2c826125fb565b505f612f36612f0b565b90505f815111612f545760405180602001604052805f815250612f7f565b80612f5e846132ab565b604051602001612f6f9291906148d0565b6040516020818303038152906040525b915050919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061306157505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613193575f613070846125fb565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130da57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156130ed57506130eb818461248c565b155b1561312f57826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401613126919061381e565b60405180910390fd5b811561319157838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6131f3838383613375565b6132a6575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361326757806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161325e91906138ae565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161329d929190614332565b60405180910390fd5b505050565b60605f60016132b984613435565b0190505f8167ffffffffffffffff8111156132d7576132d6613dd1565b5b6040519080825280601f01601f1916602001820160405280156133095781602001600182028036833780820191505090505b5090505f82602001820190505b60011561336a578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161335f5761335e61477f565b5b0494505f8503613316575b819350505050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561342c57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806133ed57506133ec848461248c565b5b8061342b57508273ffffffffffffffffffffffffffffffffffffffff1661341383612681565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613491577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816134875761348661477f565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106134ce576d04ee2d6d415b85acef810000000083816134c4576134c361477f565b5b0492506020810190505b662386f26fc1000083106134fd57662386f26fc1000083816134f3576134f261477f565b5b0492506010810190505b6305f5e1008310613526576305f5e100838161351c5761351b61477f565b5b0492506008810190505b612710831061354b5761271083816135415761354061477f565b5b0492506004810190505b6064831061356e57606483816135645761356361477f565b5b0492506002810190505b600a831061357d576001810190505b80915050919050565b6040518060c001604052805f8152602001606081526020015f8152602001606081526020015f151581526020015f81525090565b6040518061012001604052805f815260200160608152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f151581525090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136728161363e565b811461367c575f80fd5b50565b5f8135905061368d81613669565b92915050565b5f602082840312156136a8576136a7613636565b5b5f6136b58482850161367f565b91505092915050565b5f8115159050919050565b6136d2816136be565b82525050565b5f6020820190506136eb5f8301846136c9565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613733826136f1565b61373d81856136fb565b935061374d81856020860161370b565b61375681613719565b840191505092915050565b5f6020820190508181035f8301526137798184613729565b905092915050565b5f819050919050565b61379381613781565b811461379d575f80fd5b50565b5f813590506137ae8161378a565b92915050565b5f602082840312156137c9576137c8613636565b5b5f6137d6848285016137a0565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613808826137df565b9050919050565b613818816137fe565b82525050565b5f6020820190506138315f83018461380f565b92915050565b613840816137fe565b811461384a575f80fd5b50565b5f8135905061385b81613837565b92915050565b5f806040838503121561387757613876613636565b5b5f6138848582860161384d565b9250506020613895858286016137a0565b9150509250929050565b6138a881613781565b82525050565b5f6020820190506138c15f83018461389f565b92915050565b5f805f606084860312156138de576138dd613636565b5b5f6138eb8682870161384d565b93505060206138fc8682870161384d565b925050604061390d868287016137a0565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61394981613781565b82525050565b5f82825260208201905092915050565b5f613969826136f1565b613973818561394f565b935061398381856020860161370b565b61398c81613719565b840191505092915050565b6139a0816136be565b82525050565b5f60c083015f8301516139bb5f860182613940565b50602083015184820360208601526139d3828261395f565b91505060408301516139e86040860182613940565b5060608301518482036060860152613a00828261395f565b9150506080830151613a156080860182613997565b5060a0830151613a2860a0860182613940565b508091505092915050565b5f613a3e83836139a6565b905092915050565b5f602082019050919050565b5f613a5c82613917565b613a668185613921565b935083602082028501613a7885613931565b805f5b85811015613ab35784840389528151613a948582613a33565b9450613a9f83613a46565b925060208a01995050600181019050613a7b565b50829750879550505050505092915050565b5f6020820190508181035f830152613add8184613a52565b905092915050565b5f60208284031215613afa57613af9613636565b5b5f613b078482850161384d565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613b42816137fe565b82525050565b5f61012083015f830151613b5e5f860182613940565b5060208301518482036020860152613b76828261395f565b91505060408301518482036040860152613b90828261395f565b9150506060830151613ba56060860182613b39565b506080830151613bb86080860182613940565b5060a0830151613bcb60a0860182613940565b5060c0830151613bde60c0860182613b39565b5060e0830151613bf160e0860182613940565b50610100830151613c06610100860182613997565b508091505092915050565b5f613c1c8383613b48565b905092915050565b5f602082019050919050565b5f613c3a82613b10565b613c448185613b1a565b935083602082028501613c5685613b2a565b805f5b85811015613c915784840389528151613c728582613c11565b9450613c7d83613c24565b925060208a01995050600181019050613c59565b50829750879550505050505092915050565b5f6020820190508181035f830152613cbb8184613c30565b905092915050565b5f60c082019050613cd65f83018961389f565b8181036020830152613ce88188613729565b9050613cf7604083018761389f565b8181036060830152613d098186613729565b9050613d1860808301856136c9565b613d2560a083018461389f565b979650505050505050565b5f61012082019050613d445f83018c61389f565b8181036020830152613d56818b613729565b90508181036040830152613d6a818a613729565b9050613d79606083018961380f565b613d86608083018861389f565b613d9360a083018761389f565b613da060c083018661380f565b613dad60e083018561389f565b613dbb6101008301846136c9565b9a9950505050505050505050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613e0782613719565b810181811067ffffffffffffffff82111715613e2657613e25613dd1565b5b80604052505050565b5f613e3861362d565b9050613e448282613dfe565b919050565b5f67ffffffffffffffff821115613e6357613e62613dd1565b5b613e6c82613719565b9050602081019050919050565b828183375f83830152505050565b5f613e99613e9484613e49565b613e2f565b905082815260208101848484011115613eb557613eb4613dcd565b5b613ec0848285613e79565b509392505050565b5f82601f830112613edc57613edb613dc9565b5b8135613eec848260208601613e87565b91505092915050565b5f805f60608486031215613f0c57613f0b613636565b5b5f84013567ffffffffffffffff811115613f2957613f2861363a565b5b613f3586828701613ec8565b935050602084013567ffffffffffffffff811115613f5657613f5561363a565b5b613f6286828701613ec8565b9250506040613f73868287016137a0565b9150509250925092565b5f805f8060808587031215613f9557613f94613636565b5b5f85013567ffffffffffffffff811115613fb257613fb161363a565b5b613fbe87828801613ec8565b945050602085013567ffffffffffffffff811115613fdf57613fde61363a565b5b613feb87828801613ec8565b9350506040613ffc878288016137a0565b925050606061400d878288016137a0565b91505092959194509250565b614022816136be565b811461402c575f80fd5b50565b5f8135905061403d81614019565b92915050565b5f806040838503121561405957614058613636565b5b5f6140668582860161384d565b92505060206140778582860161402f565b9150509250929050565b5f67ffffffffffffffff82111561409b5761409a613dd1565b5b6140a482613719565b9050602081019050919050565b5f6140c36140be84614081565b613e2f565b9050828152602081018484840111156140df576140de613dcd565b5b6140ea848285613e79565b509392505050565b5f82601f83011261410657614105613dc9565b5b81356141168482602086016140b1565b91505092915050565b5f805f806080858703121561413757614136613636565b5b5f6141448782880161384d565b94505060206141558782880161384d565b9350506040614166878288016137a0565b925050606085013567ffffffffffffffff8111156141875761418661363a565b5b614193878288016140f2565b91505092959194509250565b5f80604083850312156141b5576141b4613636565b5b5f6141c28582860161384d565b92505060206141d38582860161384d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061422157607f821691505b602082108103614234576142336141dd565b5b50919050565b5f60608201905061424d5f83018661380f565b61425a602083018561389f565b614267604083018461380f565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6142a682613781565b91506142b183613781565b92508282039050818111156142c9576142c861426f565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61ffff82169050919050565b5f614313826142fc565b915061ffff82036143275761432661426f565b5b600182019050919050565b5f6040820190506143455f83018561380f565b614352602083018461389f565b9392505050565b7f426964206d75737420626520686967686572207468616e2063757272656e74205f8201527f6869676865737420626964000000000000000000000000000000000000000000602082015250565b5f6143b3602b836136fb565b91506143be82614359565b604082019050919050565b5f6020820190508181035f8301526143e0816143a7565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026144437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614408565b61444d8683614408565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61448861448361447e84613781565b614465565b613781565b9050919050565b5f819050919050565b6144a18361446e565b6144b56144ad8261448f565b848454614414565b825550505050565b5f90565b6144c96144bd565b6144d4818484614498565b505050565b5b818110156144f7576144ec5f826144c1565b6001810190506144da565b5050565b601f82111561453c5761450d816143e7565b614516846143f9565b81016020851015614525578190505b614539614531856143f9565b8301826144d9565b50505b505050565b5f82821c905092915050565b5f61455c5f1984600802614541565b1980831691505092915050565b5f614574838361454d565b9150826002028217905092915050565b61458d826136f1565b67ffffffffffffffff8111156145a6576145a5613dd1565b5b6145b0825461420a565b6145bb8282856144fb565b5f60209050601f8311600181146145ec575f84156145da578287015190505b6145e48582614569565b86555061464b565b601f1984166145fa866143e7565b5f5b82811015614621578489015182556001820191506020850194506020810190506145fc565b8683101561463e578489015161463a601f89168261454d565b8355505b6001600288020188555050505b505050505050565b5f61465d82613781565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361468f5761468e61426f565b5b600182019050919050565b5f6060820190508181035f8301526146b28186613729565b90506146c1602083018561389f565b6146ce604083018461389f565b949350505050565b7f41756374696f6e2068617320616c726561647920656e646564000000000000005f82015250565b5f61470a6019836136fb565b9150614715826146d6565b602082019050919050565b5f6020820190508181035f830152614737816146fe565b9050919050565b5f61474882613781565b915061475383613781565b925082820261476181613781565b915082820484148315176147785761477761426f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6147b682613781565b91506147c183613781565b9250826147d1576147d061477f565b5b828204905092915050565b5f819050919050565b5f6147ff6147fa6147f5846147dc565b614465565b613781565b9050919050565b61480f816147e5565b82525050565b5f6020820190506148285f830184614806565b92915050565b7f546f6b656e206e6f7420617661696c61626c65000000000000000000000000005f82015250565b5f6148626013836136fb565b915061486d8261482e565b602082019050919050565b5f6020820190508181035f83015261488f81614856565b9050919050565b5f81905092915050565b5f6148aa826136f1565b6148b48185614896565b93506148c481856020860161370b565b80840191505092915050565b5f6148db82856148a0565b91506148e782846148a0565b91508190509392505050565b5f6148fd82613781565b915061490883613781565b92508282019050808211156149205761491f61426f565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61495a601b836136fb565b915061496582614926565b602082019050919050565b5f6020820190508181035f8301526149878161494e565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6149b28261498e565b6149bc8185614998565b93506149cc81856020860161370b565b6149d581613719565b840191505092915050565b5f6080820190506149f35f83018761380f565b614a00602083018661380f565b614a0d604083018561389f565b8181036060830152614a1f81846149a8565b905095945050505050565b5f81519050614a3881613669565b92915050565b5f60208284031215614a5357614a52613636565b5b5f614a6084828501614a2a565b9150509291505056fea2646970667358221220ae31cda57fc1931e7e2a8cea2b1e4e21587ae75fb75ad5691ddcc4c7108ff3b964736f6c63430008190033