From wenwang at linux.vnet.ibm.com Tue Jul 8 04:59:00 2014 Content-Type: multipart/mixed; boundary="===============5472491120072200514==" MIME-Version: 1.0 From: Wen Wang To: kimchi-devel at ovirt.org Subject: Re: [Kimchi-devel] RFC: Design of Authorization in Kimchi Date: Tue, 08 Jul 2014 16:58:36 +0800 Message-ID: <53BBB2BC.9050404@linux.vnet.ibm.com> In-Reply-To: 53BB7EAD.6000701@linux.vnet.ibm.com --===============5472491120072200514== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable On 07/08/2014 01:16 PM, Wen Wang wrote: > > On 07/08/2014 04:01 AM, Aline Manera wrote: >> >> >> On 07/07/2014 07:35 AM, Aline Manera wrote: >>> >>> >>> On 07/07/2014 06:45 AM, Wen Wang wrote: >>>> Hi all, >>>> >>>> Due to the fact that Kimchi needs authorization feature to be = >>>> designed. >>>> I an posting my point of view below of how I thought about doing it, >>>> including how I plan doing it in the front-end and request for help = >>>> for >>>> the back end support. >>>> >>>> Kimchi changed to a traditional login patten in last release that = >>>> makes >>>> Kimchi more secure to use. It Before login, the front-end can = >>>> hardly get >>>> any html information before user actually login. >>> >>> If the user is not logged in, Kimchi server will always return 401 for >>> all the requests. >>> As the front end make requests to server to populate the html, if the >>> user hardly gets any html he/she will get it empty without any useful >>> information >>> At least, it is suppose to work like that. >>> >>> As we discussed, root >>>> user will have full access to Kimchi whereas the non-root user will = >>>> have >>>> restricted privileges. It will be easier and more decent to show the >>>> proper tabs to certain users that distinguished by the back-end. = >>>> Now the >>>> tabs are generated by an xml file generated from the back-end that = >>>> show >>>> all 5 tabs. We probably need to have the '*Host*' and '*template*' >>>> tab_removed_ for non-root users, which is recommended to be done in = >>>> the >>>> back-end. >>> >>> I suggest to add one parameter to the tabs in the xml. >>> >>> Example: access=3D"restricted" which means only root users can see = >>> those tabs >>> >>> And in the front end while loading the tabs, we need to query this >>> parameter and act accordingly (ie, do not display the tab with this >>> parameter for a non-root user) >>> >>> >>> >>> Host >>> tabs/host.html> >>> >>> >>> Guests >>> tabs/guests.html> >>> >>> ... >>> >>> >> >> I've just thought more about that and maybe it won't be enough >> Probably, for each tab we should describe which view display = >> according to user role >> >> >> Host >> tabs/host.html> >> >> >> >> >> >> >> For "mode" we can have: >> - full: full access to tab content >> - none: tab should not be displayed >> - resource: user can manage the resource he/she is assigned to but = >> not create a new one >> - read-only: user can see the resources but not manage them or create = >> a new one > It is nice that we add the role attributes that well indicate the = > right authorization, benefit from which the browser can provide the = > proper privileges to certain users. However we have the role already = > and according to which we can easily define the mode by user. By this = > means we probably won't need the mode attribute since the browser can = > assign different function according to role. > > Though we can difine more role that fulfil different modes like admin = > can have "full" access and user should have the role discribed as = > "none". It's good point. Talked to Yu Xin, and we figured out your mode design is pretty = brilliant for adding the mode attribute. According to which I think we = can accomplish assigning different privileges by an easier way. Here is = my thought: The front-end need only mode attribute that indicate which tab as well = as action a user can do. Take the following script for example: Host</tittle> <path>tabs/host.html</path> </tab> <tab *mode=3D"full"*> <title>Guests tabs/guests.html Network tabs/network.html Browser should know the "Host" tab should not be displayed, user should = have full access to "Guests" and "Network" tab should only be displayed = but not avaliable for editing. The role should be defined in the = back-end to indicate different roles have different access to different = tabs as well as actions. Modes are assigned to the tabs and all = instances under that tab inherit the same mode. Server filter which mode = should a user have in the back-end. User role change might be enabled in = the future and server should have the user role changed in the back-end = and return right mode to the browser. Or I have another thought is a fine grained design also inspired by your = mode pattern. Mode is defined by instance. The back-end should store the = mode for each instance. For example, one user have 10 VMs and have full = access for 3 of them including editing but only vnc connect for 7 of = them. There should be another level of mode defined to the instance = under each table. It could probably but not necessarily be like this : - master: Full access to the instance - authroized: Full access except for create/delete - usable: Only connection is allowed(For VMs' concern) - display: readonly Request for your comment Best Regards Wang Wen >> >> And in the /login request we return a list of user roles >> >> { >> username: alinefm, >> roles: [admin] >> groups: [group1, group2] >> } >> >> For now, only one value will be returned for "roles" but later one = >> user can have multiples roles: vm-user, network-admin, etc >> >> >>>> >>>> Also there need to be information provided to the front-end like the >>>> user-name, user-role as well as user-group, etc. that indicate user >>>> identity after login. >>> >>> >>> The browser need the information to give certain >>>> privileges to certain users and disable the unnecessary functions. My >>>> suggestion is to have these 3 parameters passed: ***user-name, >>>> user-role* as well as *user-group*. There is a better extendibility to >>>> user the user-role other than isRoot so that we can define more = >>>> roles in >>>> the future. As fact that we have only defined two roles now, the >>>> user-role parameter can be divided into root and guest based on = >>>> user is >>>> root or non-root. >>> >>> Today that information is returned as response for the request /login >>> >>> POST /login {username: alinefm, password: mypassword} >>> { >>> username: alinefm, >>> sudo: true, >>> groups: [group1, group2] >>> } >>> >>> If "sudo" is true, the user has root permissions, otherwise it is a >>> non-root user. >>> >>> Based on that you said, I propose to change the "sudo" parameter to >>> "role" and it the user has root permissions we set it to "admin", >>> otherwise, "user" >>> >>> POST /login {username: alinefm, password: mypassword} >>> { >>> username: alinefm, >>> role: admin, >>> groups: [group1, group2] >>> } >>> >>> >>> These message can get from *sessiondada*, *cookie *or >>>> passed according to a query. the way passing the info of the user is >>>> still under discussion. >>> >>> As you will get that info after a login request I propose to store that >>> info locally on JS > Storing it in JS as a variable is fine, according to which, the = > back-end should apply the API as you discribed above which browser can = > query everytime it's needed. We have to take user refreshing the page = > into consideration. Or else, we can store it into sessionstorage which = > has the similar function as cookie in HTML5. > > I recommend the second solution since it reduced the effort that = > request for role and username everytime we need to have the page = > refreshed. > > Best Regards > > Wang Wen >>> >>> >>> Request for your advises. >>>> >>>> Best Regards >>>> >>>> Wang Wen >>>> >>>> >>>> _______________________________________________ >>>> Kimchi-devel mailing list >>>> Kimchi-devel(a)ovirt.org >>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel >>>> >>> >>> _______________________________________________ >>> Kimchi-devel mailing list >>> Kimchi-devel(a)ovirt.org >>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel >>> > > _______________________________________________ > Kimchi-devel mailing list > Kimchi-devel(a)ovirt.org > http://lists.ovirt.org/mailman/listinfo/kimchi-devel > --===============5472491120072200514== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+CiAgPGhlYWQ+CiAgICA8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNP LTg4NTktMSIKICAgICAgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIj4KICA8L2hlYWQ+CiAgPGJv ZHkgdGV4dD0iIzAwMDAwMCIgYmdjb2xvcj0iI0ZGRkZGRiI+CiAgICA8YnI+CiAgICA8ZGl2IGNs YXNzPSJtb3otY2l0ZS1wcmVmaXgiPk9uIDA3LzA4LzIwMTQgMDE6MTYgUE0sIFdlbiBXYW5nIHdy b3RlOjxicj4KICAgIDwvZGl2PgogICAgPGJsb2NrcXVvdGUgY2l0ZT0ibWlkOjUzQkI3RUFELjYw MDA3MDFAbGludXgudm5ldC5pYm0uY29tIgogICAgICB0eXBlPSJjaXRlIj4KICAgICAgPGJyPgog ICAgICBPbiAwNy8wOC8yMDE0IDA0OjAxIEFNLCBBbGluZSBNYW5lcmEgd3JvdGU6CiAgICAgIDxi cj4KICAgICAgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+CiAgICAgICAgPGJyPgogICAgICAgIDxi cj4KICAgICAgICBPbiAwNy8wNy8yMDE0IDA3OjM1IEFNLCBBbGluZSBNYW5lcmEgd3JvdGU6CiAg ICAgICAgPGJyPgogICAgICAgIDxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPgogICAgICAgICAgPGJy PgogICAgICAgICAgPGJyPgogICAgICAgICAgT24gMDcvMDcvMjAxNCAwNjo0NSBBTSwgV2VuIFdh bmcgd3JvdGU6CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8YmxvY2txdW90ZSB0eXBlPSJjaXRl Ij5IaSBhbGwsCiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBE dWUgdG8gdGhlIGZhY3QgdGhhdCBLaW1jaGkgbmVlZHMgYXV0aG9yaXphdGlvbiBmZWF0dXJlIHRv CiAgICAgICAgICAgIGJlIGRlc2lnbmVkLgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEkg YW4gcG9zdGluZyBteSBwb2ludCBvZiB2aWV3IGJlbG93IG9mIGhvdyBJIHRob3VnaHQgYWJvdXQK ICAgICAgICAgICAgZG9pbmcgaXQsCiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgaW5jbHVk aW5nIGhvdyBJIHBsYW4gZG9pbmcgaXQgaW4gdGhlIGZyb250LWVuZCBhbmQgcmVxdWVzdAogICAg ICAgICAgICBmb3IgaGVscCBmb3IKICAgICAgICAgICAgPGJyPgogICAgICAgICAgICB0aGUgYmFj ayBlbmQgc3VwcG9ydC4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAg ICAgIEtpbWNoaSBjaGFuZ2VkIHRvIGEgdHJhZGl0aW9uYWwgbG9naW4gcGF0dGVuIGluIGxhc3Qg cmVsZWFzZQogICAgICAgICAgICB0aGF0IG1ha2VzCiAgICAgICAgICAgIDxicj4KICAgICAgICAg ICAgS2ltY2hpIG1vcmUgc2VjdXJlIHRvIHVzZS4gSXQgQmVmb3JlIGxvZ2luLCB0aGUgZnJvbnQt ZW5kCiAgICAgICAgICAgIGNhbiBoYXJkbHkgZ2V0CiAgICAgICAgICAgIDxicj4KICAgICAgICAg ICAgYW55IGh0bWwgaW5mb3JtYXRpb24gYmVmb3JlIHVzZXIgYWN0dWFsbHkgbG9naW4uCiAgICAg ICAgICAgIDxicj4KICAgICAgICAgIDwvYmxvY2txdW90ZT4KICAgICAgICAgIDxicj4KICAgICAg ICAgIElmIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4sIEtpbWNoaSBzZXJ2ZXIgd2lsbCBhbHdh eXMgcmV0dXJuCiAgICAgICAgICA0MDEgZm9yCiAgICAgICAgICA8YnI+CiAgICAgICAgICBhbGwg dGhlIHJlcXVlc3RzLgogICAgICAgICAgPGJyPgogICAgICAgICAgQXMgdGhlIGZyb250IGVuZCBt YWtlIHJlcXVlc3RzIHRvIHNlcnZlciB0byBwb3B1bGF0ZSB0aGUgaHRtbCwKICAgICAgICAgIGlm IHRoZQogICAgICAgICAgPGJyPgogICAgICAgICAgdXNlciBoYXJkbHkgZ2V0cyBhbnkgaHRtbCBo ZS9zaGUgd2lsbCBnZXQgaXQgZW1wdHkgd2l0aG91dCBhbnkKICAgICAgICAgIHVzZWZ1bAogICAg ICAgICAgPGJyPgogICAgICAgICAgaW5mb3JtYXRpb24KICAgICAgICAgIDxicj4KICAgICAgICAg IEF0IGxlYXN0LCBpdCBpcyBzdXBwb3NlIHRvIHdvcmsgbGlrZSB0aGF0LgogICAgICAgICAgPGJy PgogICAgICAgICAgPGJyPgogICAgICAgICAgJm5ic3A7IEFzIHdlIGRpc2N1c3NlZCwgcm9vdAog ICAgICAgICAgPGJyPgogICAgICAgICAgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+dXNlciB3aWxs IGhhdmUgZnVsbCBhY2Nlc3MgdG8gS2ltY2hpCiAgICAgICAgICAgIHdoZXJlYXMgdGhlIG5vbi1y b290IHVzZXIgd2lsbCBoYXZlCiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgcmVzdHJpY3Rl ZCBwcml2aWxlZ2VzLiBJdCB3aWxsIGJlIGVhc2llciBhbmQgbW9yZSBkZWNlbnQgdG8KICAgICAg ICAgICAgc2hvdyB0aGUKICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBwcm9wZXIgdGFicyB0 byBjZXJ0YWluIHVzZXJzIHRoYXQgZGlzdGluZ3Vpc2hlZCBieSB0aGUKICAgICAgICAgICAgYmFj ay1lbmQuIE5vdyB0aGUKICAgICAgICAgICAgPGJyPgogICAgICAgICAgICB0YWJzIGFyZSBnZW5l cmF0ZWQgYnkgYW4geG1sIGZpbGUgZ2VuZXJhdGVkIGZyb20gdGhlCiAgICAgICAgICAgIGJhY2st ZW5kIHRoYXQgc2hvdwogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIGFsbCA1IHRhYnMuIFdl IHByb2JhYmx5IG5lZWQgdG8gaGF2ZSB0aGUgJypIb3N0KicgYW5kCiAgICAgICAgICAgICcqdGVt cGxhdGUqJwogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIHRhYl9yZW1vdmVkXyBmb3Igbm9u LXJvb3QgdXNlcnMsIHdoaWNoIGlzIHJlY29tbWVuZGVkIHRvIGJlCiAgICAgICAgICAgIGRvbmUg aW4gdGhlCiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgYmFjay1lbmQuCiAgICAgICAgICAg IDxicj4KICAgICAgICAgIDwvYmxvY2txdW90ZT4KICAgICAgICAgIDxicj4KICAgICAgICAgIEkg c3VnZ2VzdCB0byBhZGQgb25lIHBhcmFtZXRlciB0byB0aGUgdGFicyBpbiB0aGUgeG1sLgogICAg ICAgICAgPGJyPgogICAgICAgICAgPGJyPgogICAgICAgICAgRXhhbXBsZTogYWNjZXNzPSJyZXN0 cmljdGVkIiB3aGljaCBtZWFucyBvbmx5IHJvb3QgdXNlcnMgY2FuCiAgICAgICAgICBzZWUgdGhv c2UgdGFicwogICAgICAgICAgPGJyPgogICAgICAgICAgPGJyPgogICAgICAgICAgQW5kIGluIHRo ZSBmcm9udCBlbmQgd2hpbGUgbG9hZGluZyB0aGUgdGFicywgd2UgbmVlZCB0byBxdWVyeQogICAg ICAgICAgdGhpcwogICAgICAgICAgPGJyPgogICAgICAgICAgcGFyYW1ldGVyIGFuZCBhY3QgYWNj b3JkaW5nbHkgKGllLCBkbyBub3QgZGlzcGxheSB0aGUgdGFiIHdpdGgKICAgICAgICAgIHRoaXMK ICAgICAgICAgIDxicj4KICAgICAgICAgIHBhcmFtZXRlciBmb3IgYSBub24tcm9vdCB1c2VyKQog ICAgICAgICAgPGJyPgogICAgICAgICAgPGJyPgogICAgICAgICAgJmx0O3RhYnMmZ3Q7CiAgICAg ICAgICA8YnI+CiAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmx0O3RhYiBhY2Nl c3M9InJlc3RyaWN0ZWQiJmd0OwogICAgICAgICAgPGJyPgogICAgICAgICAgJm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZsdDt0aXRsZSZndDtIb3N0Jmx0 Oy90aXRsZSZndDsKICAgICAgICAgIDxicj4KICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbHQ7cGF0aCZndDt0YWJzL2hvc3QuaHRtbCZn dDsKICAgICAgICAgIDxicj4KICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbHQ7 L3RhYiZndDsKICAgICAgICAgIDxicj4KICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyAmbHQ7dGFiJmd0OwogICAgICAgICAgPGJyPgogICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZsdDt0aXRsZSZndDtHdWVzdHMmbHQ7L3Rp dGxlJmd0OwogICAgICAgICAgPGJyPgogICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZsdDtwYXRoJmd0O3RhYnMvZ3Vlc3RzLmh0bWwmZ3Q7 CiAgICAgICAgICA8YnI+CiAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmx0Oy90 YWImZ3Q7CiAgICAgICAgICA8YnI+CiAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsg Li4uCiAgICAgICAgICA8YnI+CiAgICAgICAgICAmbHQ7L3RhYnMmZ3Q7CiAgICAgICAgICA8YnI+ CiAgICAgICAgICA8YnI+CiAgICAgICAgPC9ibG9ja3F1b3RlPgogICAgICAgIDxicj4KICAgICAg ICBJJ3ZlIGp1c3QgdGhvdWdodCBtb3JlIGFib3V0IHRoYXQgYW5kIG1heWJlIGl0IHdvbid0IGJl IGVub3VnaAogICAgICAgIDxicj4KICAgICAgICBQcm9iYWJseSwgZm9yIGVhY2ggdGFiIHdlIHNo b3VsZCBkZXNjcmliZSB3aGljaCB2aWV3IGRpc3BsYXkKICAgICAgICBhY2NvcmRpbmcgdG8gdXNl ciByb2xlCiAgICAgICAgPGJyPgogICAgICAgIDxicj4KICAgICAgICAmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgJmx0O3RhYiZndDsKICAgICAgICA8YnI+CiAgICAgICAgJm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZsdDt0aXRsZSZn dDtIb3N0Jmx0Oy90aXRsZSZndDsKICAgICAgICA8YnI+CiAgICAgICAgJm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZsdDtwYXRoJmd0O3RhYnMv aG9zdC5odG1sJmd0OwogICAgICAgIDxicj4KICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmx0O3ZpZXdzJmd0OwogICAgICAgIDxi cj4KICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmx0O3ZpZXcgcm9sZT0iYWRtaW4iIG1v ZGU9ImZ1bGwiIC8mZ3Q7CiAgICAgICAgPGJyPgogICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyAmbHQ7dmlldyByb2xlPSJ1c2VyIiBtb2RlPSJub25lIiAvJmd0OwogICAgICAgIDxicj4KICAg ICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmx0Oy92aWV3cyZndDsKICAgICAg ICA8YnI+CiAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZsdDsvdGFiJmd0 OwogICAgICAgIDxicj4KICAgICAgICA8YnI+CiAgICAgICAgRm9yICJtb2RlIiB3ZSBjYW4gaGF2 ZToKICAgICAgICA8YnI+CiAgICAgICAgLSBmdWxsOiBmdWxsIGFjY2VzcyB0byB0YWIgY29udGVu dAogICAgICAgIDxicj4KICAgICAgICAtIG5vbmU6IHRhYiBzaG91bGQgbm90IGJlIGRpc3BsYXll ZAogICAgICAgIDxicj4KICAgICAgICAtIHJlc291cmNlOiB1c2VyIGNhbiBtYW5hZ2UgdGhlIHJl c291cmNlIGhlL3NoZSBpcyBhc3NpZ25lZCB0bwogICAgICAgIGJ1dCBub3QgY3JlYXRlIGEgbmV3 IG9uZQogICAgICAgIDxicj4KICAgICAgICAtIHJlYWQtb25seTogdXNlciBjYW4gc2VlIHRoZSBy ZXNvdXJjZXMgYnV0IG5vdCBtYW5hZ2UgdGhlbSBvcgogICAgICAgIGNyZWF0ZSBhIG5ldyBvbmUK ICAgICAgICA8YnI+CiAgICAgIDwvYmxvY2txdW90ZT4KICAgICAgSXQgaXMgbmljZSB0aGF0IHdl IGFkZCB0aGUgcm9sZSBhdHRyaWJ1dGVzIHRoYXQgd2VsbCBpbmRpY2F0ZSB0aGUKICAgICAgcmln aHQgYXV0aG9yaXphdGlvbiwgYmVuZWZpdCBmcm9tIHdoaWNoIHRoZSBicm93c2VyIGNhbiBwcm92 aWRlCiAgICAgIHRoZSBwcm9wZXIgcHJpdmlsZWdlcyB0byBjZXJ0YWluIHVzZXJzLiBIb3dldmVy IHdlIGhhdmUgdGhlIHJvbGUKICAgICAgYWxyZWFkeSBhbmQgYWNjb3JkaW5nIHRvIHdoaWNoIHdl IGNhbiBlYXNpbHkgZGVmaW5lIHRoZSBtb2RlIGJ5CiAgICAgIHVzZXIuIEJ5IHRoaXMgbWVhbnMg d2UgcHJvYmFibHkgd29uJ3QgbmVlZCB0aGUgbW9kZSBhdHRyaWJ1dGUKICAgICAgc2luY2UgdGhl IGJyb3dzZXIgY2FuIGFzc2lnbiBkaWZmZXJlbnQgZnVuY3Rpb24gYWNjb3JkaW5nIHRvIHJvbGUu CiAgICAgIDxicj4KICAgICAgPGJyPgogICAgICBUaG91Z2ggd2UgY2FuIGRpZmluZSBtb3JlIHJv bGUgdGhhdCBmdWxmaWwgZGlmZmVyZW50IG1vZGVzIGxpa2UKICAgICAgYWRtaW4gY2FuIGhhdmUg ImZ1bGwiIGFjY2VzcyBhbmQgdXNlciBzaG91bGQgaGF2ZSB0aGUgcm9sZQogICAgICBkaXNjcmli ZWQgYXMgIm5vbmUiLiBJdCdzIGdvb2QgcG9pbnQuIDxicj4KICAgIDwvYmxvY2txdW90ZT4KICAg IFRhbGtlZCB0byBZdSBYaW4sIGFuZCB3ZSBmaWd1cmVkIG91dCB5b3VyIG1vZGUgZGVzaWduIGlz IHByZXR0eQogICAgYnJpbGxpYW50IGZvciBhZGRpbmcgdGhlIG1vZGUgYXR0cmlidXRlLiBBY2Nv cmRpbmcgdG8gd2hpY2ggSSB0aGluawogICAgd2UgY2FuIGFjY29tcGxpc2ggYXNzaWduaW5nIGRp ZmZlcmVudCBwcml2aWxlZ2VzIGJ5IGFuIGVhc2llciB3YXkuCiAgICBIZXJlIGlzIG15IHRob3Vn aHQ6PGJyPgogICAgPGJyPgogICAgVGhlIGZyb250LWVuZCBuZWVkIG9ubHkgbW9kZSBhdHRyaWJ1 dGUgdGhhdCBpbmRpY2F0ZSB3aGljaCB0YWIgYXMKICAgIHdlbGwgYXMgYWN0aW9uIGEgdXNlciBj YW4gZG8uIFRha2UgdGhlIGZvbGxvd2luZyBzY3JpcHQgZm9yIGV4YW1wbGU6PGJyPgogICAgPGJy PgogICAgJmx0O3RhYiA8Yj5tb2RlPSJub25lIjwvYj4mZ3Q7PGJyPgogICAgJm5ic3A7Jm5ic3A7 Jm5ic3A7ICZsdDt0aXRsZSZndDtIb3N0Jmx0Oy90aXR0bGUmZ3Q7PGJyPgogICAgJm5ic3A7Jm5i c3A7Jm5ic3A7ICZsdDtwYXRoJmd0O3RhYnMvaG9zdC5odG1sJmx0Oy9wYXRoJmd0Ozxicj4KICAg ICZsdDsvdGFiJmd0Ozxicj4KICAgIDxicj4KICAgICZsdDt0YWIgPGI+bW9kZT0iZnVsbCI8L2I+ Jmd0Ozxicj4KICAgICZuYnNwOyZuYnNwOyZuYnNwOyAmbHQ7dGl0bGUmZ3Q7R3Vlc3RzJmx0Oy90 aXRsZSZndDs8YnI+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDsgJmx0O3BhdGgmZ3Q7dGFicy9ndWVz dHMuaHRtbCZsdDsvcGF0aCZndDs8YnI+CiAgICAmbHQ7L3RhYnMmZ3Q7PGJyPgogICAgPGJyPgog ICAgJmx0O3RhYiA8Yj5tb2RlPSJyZWFkb25seSI8L2I+Jmd0Ozxicj4KICAgICZuYnNwOyZuYnNw OyZuYnNwOyAmbHQ7dGl0bGUmZ3Q7TmV0d29yayZsdDsvdGl0bGUmZ3Q7PGJyPgogICAgJm5ic3A7 Jm5ic3A7Jm5ic3A7ICZsdDtwYXRoJmd0O3RhYnMvbmV0d29yay5odG1sJmx0Oy9wYXRoJmd0Ozxi cj4KICAgICZsdDsvdGFicyZndDs8YnI+CiAgICA8YnI+CiAgICBCcm93c2VyIHNob3VsZCBrbm93 IHRoZSAiSG9zdCIgdGFiIHNob3VsZCBub3QgYmUgZGlzcGxheWVkLCB1c2VyCiAgICBzaG91bGQg aGF2ZSBmdWxsIGFjY2VzcyB0byAiR3Vlc3RzIiBhbmQgIk5ldHdvcmsiIHRhYiBzaG91bGQgb25s eSBiZQogICAgZGlzcGxheWVkIGJ1dCBub3QgYXZhbGlhYmxlIGZvciBlZGl0aW5nLiBUaGUgcm9s ZSBzaG91bGQgYmUgZGVmaW5lZAogICAgaW4gdGhlIGJhY2stZW5kIHRvIGluZGljYXRlIGRpZmZl cmVudCByb2xlcyBoYXZlIGRpZmZlcmVudCBhY2Nlc3MgdG8KICAgIGRpZmZlcmVudCB0YWJzIGFz IHdlbGwgYXMgYWN0aW9ucy4gTW9kZXMgYXJlIGFzc2lnbmVkIHRvIHRoZSB0YWJzCiAgICBhbmQg YWxsIGluc3RhbmNlcyB1bmRlciB0aGF0IHRhYiBpbmhlcml0IHRoZSBzYW1lIG1vZGUuIFNlcnZl cgogICAgZmlsdGVyIHdoaWNoIG1vZGUgc2hvdWxkIGEgdXNlciBoYXZlIGluIHRoZSBiYWNrLWVu ZC4gVXNlciByb2xlCiAgICBjaGFuZ2UgbWlnaHQgYmUgZW5hYmxlZCBpbiB0aGUgZnV0dXJlIGFu ZCBzZXJ2ZXIgc2hvdWxkIGhhdmUgdGhlCiAgICB1c2VyIHJvbGUgY2hhbmdlZCBpbiB0aGUgYmFj ay1lbmQgYW5kIHJldHVybiByaWdodCBtb2RlIHRvIHRoZQogICAgYnJvd3Nlci4gPGJyPgogICAg PGJyPgogICAgT3IgSSBoYXZlIGFub3RoZXIgdGhvdWdodCBpcyBhIGZpbmUgZ3JhaW5lZCBkZXNp Z24gYWxzbyBpbnNwaXJlZCBieQogICAgeW91ciBtb2RlIHBhdHRlcm4uIE1vZGUgaXMgZGVmaW5l ZCBieSBpbnN0YW5jZS4gVGhlIGJhY2stZW5kIHNob3VsZAogICAgc3RvcmUgdGhlIG1vZGUgZm9y IGVhY2ggaW5zdGFuY2UuIEZvciBleGFtcGxlLCBvbmUgdXNlciBoYXZlIDEwIFZNcwogICAgYW5k IGhhdmUgZnVsbCBhY2Nlc3MgZm9yIDMgb2YgdGhlbSBpbmNsdWRpbmcgZWRpdGluZyBidXQgb25s eSB2bmMKICAgIGNvbm5lY3QgZm9yIDcgb2YgdGhlbS4gVGhlcmUgc2hvdWxkIGJlIGFub3RoZXIg bGV2ZWwgb2YgbW9kZSBkZWZpbmVkCiAgICB0byB0aGUgaW5zdGFuY2UgdW5kZXIgZWFjaCB0YWJs ZS4gSXQgY291bGQgcHJvYmFibHkgYnV0IG5vdAogICAgbmVjZXNzYXJpbHkgYmUgbGlrZSB0aGlz IDo8YnI+CiAgICA8YnI+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDsgLSBtYXN0ZXI6IEZ1bGwgYWNj ZXNzIHRvIHRoZSBpbnN0YW5jZTxicj4KICAgICZuYnNwOyZuYnNwOyZuYnNwOyAtIGF1dGhyb2l6 ZWQ6IEZ1bGwgYWNjZXNzIGV4Y2VwdCBmb3IgY3JlYXRlL2RlbGV0ZTxicj4KICAgICZuYnNwOyZu YnNwOyZuYnNwOyAtIHVzYWJsZTogT25seSBjb25uZWN0aW9uIGlzIGFsbG93ZWQoRm9yIFZNcycg Y29uY2Vybik8YnI+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDsgLSBkaXNwbGF5OiByZWFkb25seTxi cj4KICAgIDxicj4KICAgIFJlcXVlc3QgZm9yIHlvdXIgY29tbWVudDxicj4KICAgIDxicj4KICAg IEJlc3QgUmVnYXJkczxicj4KICAgIDxicj4KICAgIFdhbmcgV2VuPGJyPgogICAgPGJsb2NrcXVv dGUgY2l0ZT0ibWlkOjUzQkI3RUFELjYwMDA3MDFAbGludXgudm5ldC5pYm0uY29tIgogICAgICB0 eXBlPSJjaXRlIj4KICAgICAgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+CiAgICAgICAgPGJyPgog ICAgICAgIEFuZCBpbiB0aGUgL2xvZ2luIHJlcXVlc3Qgd2UgcmV0dXJuIGEgbGlzdCBvZiB1c2Vy IHJvbGVzCiAgICAgICAgPGJyPgogICAgICAgIDxicj4KICAgICAgICB7CiAgICAgICAgPGJyPgog ICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB1c2VybmFtZTogYWxpbmVmbSwK ICAgICAgICA8YnI+CiAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJvbGVz OiBbYWRtaW5dCiAgICAgICAgPGJyPgogICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyBncm91cHM6IFtncm91cDEsIGdyb3VwMl0KICAgICAgICA8YnI+CiAgICAgICAgJm5ic3A7 fQogICAgICAgIDxicj4KICAgICAgICA8YnI+CiAgICAgICAgRm9yIG5vdywgb25seSBvbmUgdmFs dWUgd2lsbCBiZSByZXR1cm5lZCBmb3IgInJvbGVzIiBidXQgbGF0ZXIKICAgICAgICBvbmUgdXNl ciBjYW4gaGF2ZSBtdWx0aXBsZXMgcm9sZXM6IHZtLXVzZXIsIG5ldHdvcmstYWRtaW4sIGV0Ywog ICAgICAgIDxicj4KICAgICAgICA8YnI+CiAgICAgICAgPGJyPgogICAgICAgIDxibG9ja3F1b3Rl IHR5cGU9ImNpdGUiPgogICAgICAgICAgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+CiAgICAgICAg ICAgIDxicj4KICAgICAgICAgICAgQWxzbyB0aGVyZSBuZWVkIHRvIGJlIGluZm9ybWF0aW9uIHBy b3ZpZGVkIHRvIHRoZSBmcm9udC1lbmQKICAgICAgICAgICAgbGlrZSB0aGUKICAgICAgICAgICAg PGJyPgogICAgICAgICAgICB1c2VyLW5hbWUsIHVzZXItcm9sZSBhcyB3ZWxsIGFzIHVzZXItZ3Jv dXAsIGV0Yy4gdGhhdAogICAgICAgICAgICBpbmRpY2F0ZSB1c2VyCiAgICAgICAgICAgIDxicj4K ICAgICAgICAgICAgaWRlbnRpdHkgYWZ0ZXIgbG9naW4uCiAgICAgICAgICAgIDxicj4KICAgICAg ICAgIDwvYmxvY2txdW90ZT4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxicj4KICAgICAgICAg IFRoZSBicm93c2VyIG5lZWQgdGhlIGluZm9ybWF0aW9uIHRvIGdpdmUgY2VydGFpbgogICAgICAg ICAgPGJyPgogICAgICAgICAgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+cHJpdmlsZWdlcyB0byBj ZXJ0YWluIHVzZXJzIGFuZAogICAgICAgICAgICBkaXNhYmxlIHRoZSB1bm5lY2Vzc2FyeSBmdW5j dGlvbnMuIE15CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgc3VnZ2VzdGlvbiBpcyB0byBo YXZlIHRoZXNlIDMgcGFyYW1ldGVycyBwYXNzZWQ6CiAgICAgICAgICAgICoqKnVzZXItbmFtZSwK ICAgICAgICAgICAgPGJyPgogICAgICAgICAgICB1c2VyLXJvbGUqIGFzIHdlbGwgYXMgKnVzZXIt Z3JvdXAqLiBUaGVyZSBpcyBhIGJldHRlcgogICAgICAgICAgICBleHRlbmRpYmlsaXR5IHRvCiAg ICAgICAgICAgIDxicj4KICAgICAgICAgICAgdXNlciB0aGUgdXNlci1yb2xlIG90aGVyIHRoYW4g aXNSb290IHNvIHRoYXQgd2UgY2FuIGRlZmluZQogICAgICAgICAgICBtb3JlIHJvbGVzIGluCiAg ICAgICAgICAgIDxicj4KICAgICAgICAgICAgdGhlIGZ1dHVyZS4gQXMgZmFjdCB0aGF0IHdlIGhh dmUgb25seSBkZWZpbmVkIHR3byByb2xlcyBub3csCiAgICAgICAgICAgIHRoZQogICAgICAgICAg ICA8YnI+CiAgICAgICAgICAgIHVzZXItcm9sZSBwYXJhbWV0ZXIgY2FuIGJlIGRpdmlkZWQgaW50 byByb290IGFuZCBndWVzdCBiYXNlZAogICAgICAgICAgICBvbiB1c2VyIGlzCiAgICAgICAgICAg IDxicj4KICAgICAgICAgICAgcm9vdCBvciBub24tcm9vdC4KICAgICAgICAgICAgPGJyPgogICAg ICAgICAgPC9ibG9ja3F1b3RlPgogICAgICAgICAgPGJyPgogICAgICAgICAgVG9kYXkgdGhhdCBp bmZvcm1hdGlvbiBpcyByZXR1cm5lZCBhcyByZXNwb25zZSBmb3IgdGhlIHJlcXVlc3QKICAgICAg ICAgIC9sb2dpbgogICAgICAgICAgPGJyPgogICAgICAgICAgPGJyPgogICAgICAgICAgUE9TVCAv bG9naW4ge3VzZXJuYW1lOiBhbGluZWZtLCBwYXNzd29yZDogbXlwYXNzd29yZH0KICAgICAgICAg IDxicj4KICAgICAgICAgIHsKICAgICAgICAgIDxicj4KICAgICAgICAgICZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyB1c2VybmFtZTogYWxpbmVmbSwKICAgICAgICAgIDxicj4KICAgICAgICAgICZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzdWRvOiB0cnVlLAogICAgICAgICAgPGJyPgogICAgICAg ICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGdyb3VwczogW2dyb3VwMSwgZ3JvdXAyXQogICAg ICAgICAgPGJyPgogICAgICAgICAgfQogICAgICAgICAgPGJyPgogICAgICAgICAgPGJyPgogICAg ICAgICAgSWYgInN1ZG8iIGlzIHRydWUsIHRoZSB1c2VyIGhhcyByb290IHBlcm1pc3Npb25zLCBv dGhlcndpc2UgaXQKICAgICAgICAgIGlzIGEKICAgICAgICAgIDxicj4KICAgICAgICAgIG5vbi1y b290IHVzZXIuCiAgICAgICAgICA8YnI+CiAgICAgICAgICA8YnI+CiAgICAgICAgICBCYXNlZCBv biB0aGF0IHlvdSBzYWlkLCBJIHByb3Bvc2UgdG8gY2hhbmdlIHRoZSAic3VkbyIKICAgICAgICAg IHBhcmFtZXRlciB0bwogICAgICAgICAgPGJyPgogICAgICAgICAgInJvbGUiIGFuZCBpdCB0aGUg dXNlciBoYXMgcm9vdCBwZXJtaXNzaW9ucyB3ZSBzZXQgaXQgdG8KICAgICAgICAgICJhZG1pbiIs CiAgICAgICAgICA8YnI+CiAgICAgICAgICBvdGhlcndpc2UsICJ1c2VyIgogICAgICAgICAgPGJy PgogICAgICAgICAgPGJyPgogICAgICAgICAgUE9TVCAvbG9naW4ge3VzZXJuYW1lOiBhbGluZWZt LCBwYXNzd29yZDogbXlwYXNzd29yZH0KICAgICAgICAgIDxicj4KICAgICAgICAgIHsKICAgICAg ICAgIDxicj4KICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB1c2VybmFtZTogYWxp bmVmbSwKICAgICAgICAgIDxicj4KICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBy b2xlOiBhZG1pbiwKICAgICAgICAgIDxicj4KICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyBncm91cHM6IFtncm91cDEsIGdyb3VwMl0KICAgICAgICAgIDxicj4KICAgICAgICAgIH0K ICAgICAgICAgIDxicj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxicj4KICAgICAgICAgIFRo ZXNlIG1lc3NhZ2UgY2FuIGdldCBmcm9tICpzZXNzaW9uZGFkYSosICpjb29raWUgKm9yCiAgICAg ICAgICA8YnI+CiAgICAgICAgICA8YmxvY2txdW90ZSB0eXBlPSJjaXRlIj5wYXNzZWQgYWNjb3Jk aW5nIHRvIGEgcXVlcnkuIHRoZSB3YXkKICAgICAgICAgICAgcGFzc2luZyB0aGUgaW5mbyBvZiB0 aGUgdXNlciBpcwogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIHN0aWxsIHVuZGVyIGRpc2N1 c3Npb24uCiAgICAgICAgICAgIDxicj4KICAgICAgICAgIDwvYmxvY2txdW90ZT4KICAgICAgICAg IDxicj4KICAgICAgICAgIEFzIHlvdSB3aWxsIGdldCB0aGF0IGluZm8gYWZ0ZXIgYSBsb2dpbiBy ZXF1ZXN0IEkgcHJvcG9zZSB0bwogICAgICAgICAgc3RvcmUgdGhhdAogICAgICAgICAgPGJyPgog ICAgICAgICAgaW5mbyBsb2NhbGx5IG9uIEpTCiAgICAgICAgICA8YnI+CiAgICAgICAgPC9ibG9j a3F1b3RlPgogICAgICA8L2Jsb2NrcXVvdGU+CiAgICAgIFN0b3JpbmcgaXQgaW4gSlMgYXMgYSB2 YXJpYWJsZSBpcyBmaW5lLCBhY2NvcmRpbmcgdG8gd2hpY2gsIHRoZQogICAgICBiYWNrLWVuZCBz aG91bGQgYXBwbHkgdGhlIEFQSSBhcyB5b3UgZGlzY3JpYmVkIGFib3ZlIHdoaWNoIGJyb3dzZXIK ICAgICAgY2FuIHF1ZXJ5IGV2ZXJ5dGltZSBpdCdzIG5lZWRlZC4gV2UgaGF2ZSB0byB0YWtlIHVz ZXIgcmVmcmVzaGluZwogICAgICB0aGUgcGFnZSBpbnRvIGNvbnNpZGVyYXRpb24uIE9yIGVsc2Us IHdlIGNhbiBzdG9yZSBpdCBpbnRvCiAgICAgIHNlc3Npb25zdG9yYWdlIHdoaWNoIGhhcyB0aGUg c2ltaWxhciBmdW5jdGlvbiBhcyBjb29raWUgaW4gSFRNTDUuCiAgICAgIDxicj4KICAgICAgPGJy PgogICAgICBJIHJlY29tbWVuZCB0aGUgc2Vjb25kIHNvbHV0aW9uIHNpbmNlIGl0IHJlZHVjZWQg dGhlIGVmZm9ydCB0aGF0CiAgICAgIHJlcXVlc3QgZm9yIHJvbGUgYW5kIHVzZXJuYW1lIGV2ZXJ5 dGltZSB3ZSBuZWVkIHRvIGhhdmUgdGhlIHBhZ2UKICAgICAgcmVmcmVzaGVkLgogICAgICA8YnI+ CiAgICAgIDxicj4KICAgICAgQmVzdCBSZWdhcmRzCiAgICAgIDxicj4KICAgICAgPGJyPgogICAg ICBXYW5nIFdlbgogICAgICA8YnI+CiAgICAgIDxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPgogICAg ICAgIDxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPgogICAgICAgICAgPGJyPgogICAgICAgICAgPGJy PgogICAgICAgICAgUmVxdWVzdCBmb3IgeW91ciBhZHZpc2VzLgogICAgICAgICAgPGJyPgogICAg ICAgICAgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAg ICAgQmVzdCBSZWdhcmRzCiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGJyPgogICAgICAg ICAgICBXYW5nIFdlbgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAg ICAgPGJyPgogICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEtpbWNoaS1kZXZlbCBtYWls aW5nIGxpc3QKICAgICAgICAgICAgPGJyPgogICAgICAgICAgICA8YSBjbGFzcz0ibW96LXR4dC1s aW5rLWFiYnJldmlhdGVkIiBocmVmPSJtYWlsdG86S2ltY2hpLWRldmVsQG92aXJ0Lm9yZyI+S2lt Y2hpLWRldmVsQG92aXJ0Lm9yZzwvYT4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICA8YSBj bGFzcz0ibW96LXR4dC1saW5rLWZyZWV0ZXh0IiBocmVmPSJodHRwOi8vbGlzdHMub3ZpcnQub3Jn L21haWxtYW4vbGlzdGluZm8va2ltY2hpLWRldmVsIj5odHRwOi8vbGlzdHMub3ZpcnQub3JnL21h aWxtYW4vbGlzdGluZm8va2ltY2hpLWRldmVsPC9hPgogICAgICAgICAgICA8YnI+CiAgICAgICAg ICAgIDxicj4KICAgICAgICAgIDwvYmxvY2txdW90ZT4KICAgICAgICAgIDxicj4KICAgICAgICAg IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiAgICAgICAg ICA8YnI+CiAgICAgICAgICBLaW1jaGktZGV2ZWwgbWFpbGluZyBsaXN0CiAgICAgICAgICA8YnI+ CiAgICAgICAgICA8YSBjbGFzcz0ibW96LXR4dC1saW5rLWFiYnJldmlhdGVkIiBocmVmPSJtYWls dG86S2ltY2hpLWRldmVsQG92aXJ0Lm9yZyI+S2ltY2hpLWRldmVsQG92aXJ0Lm9yZzwvYT4KICAg ICAgICAgIDxicj4KICAgICAgICAgIDxhIGNsYXNzPSJtb3otdHh0LWxpbmstZnJlZXRleHQiIGhy ZWY9Imh0dHA6Ly9saXN0cy5vdmlydC5vcmcvbWFpbG1hbi9saXN0aW5mby9raW1jaGktZGV2ZWwi Pmh0dHA6Ly9saXN0cy5vdmlydC5vcmcvbWFpbG1hbi9saXN0aW5mby9raW1jaGktZGV2ZWw8L2E+ CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8YnI+CiAgICAgICAgPC9ibG9ja3F1b3RlPgogICAg ICA8L2Jsb2NrcXVvdGU+CiAgICAgIDxicj4KICAgICAgX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KICAgICAgPGJyPgogICAgICBLaW1jaGktZGV2ZWwgbWFp bGluZyBsaXN0CiAgICAgIDxicj4KICAgICAgPGEgY2xhc3M9Im1vei10eHQtbGluay1hYmJyZXZp YXRlZCIgaHJlZj0ibWFpbHRvOktpbWNoaS1kZXZlbEBvdmlydC5vcmciPktpbWNoaS1kZXZlbEBv dmlydC5vcmc8L2E+CiAgICAgIDxicj4KICAgICAgPGEgY2xhc3M9Im1vei10eHQtbGluay1mcmVl dGV4dCIgaHJlZj0iaHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2tpbWNo aS1kZXZlbCI+aHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2tpbWNoaS1k ZXZlbDwvYT4KICAgICAgPGJyPgogICAgICA8YnI+CiAgICA8L2Jsb2NrcXVvdGU+CiAgICA8YnI+ CiAgPC9ib2R5Pgo8L2h0bWw+Cg== --===============5472491120072200514==--