Content-Type: multipart/related; start=; boundary=----------RTqM9kPiSYaCbikkmWWjiB Content-Location: http://en.wikibooks.org/wiki/Styles_of_Art Subject: =?utf-8?Q?Styles=20of=20Art=20-=20Wikibooks,=20collection=20of=20open-content=20textbooks?= MIME-Version: 1.0 ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=Styles_of_Art.htm Content-Type: text/html; charset=UTF-8; name=Styles_of_Art.htm Content-ID: Content-Location: http://en.wikibooks.org/wiki/Styles_of_Art Content-Transfer-Encoding: 8bit Styles of Art - Wikibooks, collection of open-content textbooks

Styles of Art

From Wikibooks, the open-content textbooks collection

Jump to: navigation, search

[edit] Art Movements

Abstract

abstract expressionism Movement in painting, originating in New York City in the 1940s. It emphasized spontaneous personal expression, freedom from accepted artistic values, surface qualities of paint, and the act of painting itself. Pollock, de Kooning, Motherwell, and Kline, are important abstract expressionists.

art deco Design style prevalent during the 1920s and 1930s, characterized by a sleek use of straight lines and slender form.

art nouveau A decorative art movement that emerged in the late nineteenth century. Characterized by dense asymmetrical ornamentation in sinuous forms, it is often symbolic and of an erotic nature. Klimt worked in an art nouveau style.

Ash Can School Group of American artists active from 1908 to 1918. It included members of The Eight such as Henri and Davies; Hopper was also part of the Ash Can group. Their work featured scenes of urban realism.

Barbizon School An association of French landscape painters, c. 1840-70, who lived in the village of Barbizon and who painted directly from nature. Theodore Rousseau was a leader; Corot and Millet were also associated with the group.

Baroque A movement in European painting in the seventeenth and early eighteenth centuries, characterized by violent movement, strong emotion, and dramatic lighting and coloring. Bernini, Caravaggio and Rubens were among important baroque artists.

Byzantine A style of the Byzantine Empire and its provinces, c. 330-1450. Appearing mostly in religious mosaics, manuscript illuminations, and panel paintings, it is characterized by rigid, monumental, stylized forms with gold backgrounds.

classicism Referring to the principles of Greek and Roman art of antiquity with the emphasis on harmony, proportion, balance, and simplicity. In a general sense, it refers to art based on accepted standards of beauty.

color field painting A technique in abstract painting developed in the 1950s. It focuses on the lyrical effects of large areas of color, often poured or stained onto the canvas. Newman, Rothko, and Frankenthaler painted in this manner.

conceptual art A movement of the 1960s and 1970s that emphasized the artistic idea over the art object. It attempted to free art from the confines of the gallery and the pedestal.

constructivism A Russian abstract movement founded by Tatlin, Gabo, and Antoine Pevsner, c. 1915. It focused on art for the industrial age. Tatlin believed in art with a utilitarian purpose. cubism A revolutionary movement begun by Picasso and Braque in the early twentieth century. It employs an analytic vision based on fragmentation and multiple viewpoints.

dadaism A movement, c. 1915-23, that rejected accepted aesthetic standards. It aimed to create antiart and nonart, often employing a sense of the absurd. The Eight A group of American painters who united out of opposition to academic standards in the early twentieth century. Members of the group were Robert Henri, Arthur Davies, Maurice Prendergast, William James Glackens, Ernest Lawson, Everett Shinn, John Sloan, and George Luks.

expressionism Refers to art that uses emphasis and distortion to communicate emotion. More specifically, it refers to early twentieth century northern European art, especially in Germany c. 1905-25. Artists such as Rouault, Kokoschka, and Schiele painted in this manner.

fauvism From the French word fauve , meaning "wild beast ." A style adopted by artists associated with Matisse, c. 1905-08. They painted in a spontaneous manner, using bold colors.

folk art Works of a culturally homogeneous people without formal training, generally according to regional traditions and involving crafts.

futurism An Italian movement c. 1909-19. It attempted to integrate the dynamism of the machine age into art. Boccioni was a futurist artist.

Gothic A European movement beginning in France. Gothic sculpture emerged c. 1200, Gothic painting later in the thirteenth century. The artworks are characterized by a linear, graceful, elegant style more naturalistic than that which had existed previously in Europe.

impressionism A late-nineteenth-century French school of painting. It focused on transitory visual impressions, often painted directly from nature, with an emphasis on the changing effects of light and color. Monet, Renoir, and Pissarro were important impressionists.

mannerism A style, c. 1520-1600, that arose in reaction to the harmony and proportion of the High Renaissance. It featured elongated, contorted poses, crowded canvases, and harsh lighting and coloring.

minimalism A movement in American painting and sculpture that originated in the late 1950s. It emphasized pure, reduced forms and strict, systematic compositions.

Nabis From the Hebrew word for "prophet." A group of French painters active in the 1890s who worked in a subjective, sometimes mystical style, stressing flat areas of color and pattern. Bonnard and Vuillard were members.

naive art Artwork, usually paintings, characterized by a simplified style, nonscientific perspective, and bold colors. The artists are generally not professionally trained. Henri Rousseau and Grandma Moses worked in this style.

neoclassicism A European style of the late eighteenth and early nineteenth centuries. Its elegant, balanced works revived the order and harmony of ancient Greek and Roman art. David and Canova are examples of neoclassicists.

op art An abstract movement in Europe and the United States, begun in the mid-1950s, based on the effects of optical patterns. Albers worked in this style.

photorealism A figurative movement that emerged in the United States and Britain in the late 1960s and 1970s. The subject matter, usually everyday scenes, is portrayed in an extremely detailed, exacting style. It is also called superrealism, especially when referring to sculpture.

pointillism A method of painting developed by Seurat and Paul Signac in the 1880s. It used dabs of pure color that were intended to mix in the eyes of viewers rather than on the canvas. It is also called divisionism or neoimpressionism.

pop art A movement that began in Britain and the United States in the 1950s. It used the images and techniques of mass media, advertising, and popular culture, often in an ironic way. Works of Warhol, Lichtenstein, and Oldenburg exemplify this style.

postimpressionism A term coined by British art critic Roger Fry to refer to a group of nineteenth-century painters, including Cezanne, Van Gogh, and Gauguin, who were dissatisfied with the limitations of expressionism. A movement in France that represented both an extension of Impressionism and a rejection of that style's inherent limitations.It has since been used to refer to various reactions against impressionism, such as fauvism nd expressionism.From the 1880s several artists began to develop different principles for the use of color, pattern, form and line, derived from the Impressionist.

Pre-Raphaelite Brotherhood A group of English painters formed in 1848. These artists attempted to recapture the style of painting preceding Raphael. They rejected industrialized England and focused on painting from nature, producing detailed, colorful works. Rossetti was a founding member.

realism In a general sense, refers to objective representation. More specifically, a nineteenth century movement, especially in France, that rejected idealized academic styles in favor of everyday subjects. Daumier, Millet, and Courbet were realists.

Renaissance Meaning "rebirth" in French. Refers to Europe c. 1400-1600. Renaissance art which began in Italy, stressed the forms of classical antiquity, a realistic representation of space based on scientific perspective, and secular subjects. The works of Leonardo, Michelangelo, and Raphael exemplify the balance and harmony of the High Renaissance (c. 1495-1520).

rococo An eighteenth-century European style, originating in France. In reaction to the grandeur and massiveness of the baroque, rococo employed refined, elegant, highly decorative forms. Fragonard worked in this style.

Romanesque A European style developed in France in the late eleventh century. Its sculpture is ornamental, stylized and complex. Some Romanesque frescoes survive, painted in a monumental, active manner.

romanticism A European movement of the late eighteenth to mid nineteenth century. In reaction to neoclassicism, it focused on emotion over reason, and on spontaneous expression. The subject matter was invested with drama and usually painted energetically in brilliant colors. Delacroix, Gericault, Turner, and Blake were Romantic artists.

suprematism A Russian abstract movement originated by Malevich c. 1913. It was characterized by flat geometric shapes on plain backgrounds and emphasized the spiritual qualities of pure form.

surrealism A movement of the 1920s and 1930s that began in France. It explored the unconscious, often using images from dreams. It used spontaneous techniques and featured unexpected juxtapositions of objects. Magritte, Dali, Miro, and Ernst painted surrealist works.

symbolism A painting movement that flourished in France in the 1880s and 1890s in which subject matter was suggested rather than directly presented. It featured decorative, stylized, and evocative images.

------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=favicon.ico Content-Type: image/x-icon; name=favicon.ico Content-Location: http://en.wikibooks.org/favicon.ico Content-Transfer-Encoding: Base64 AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAUA AAAFAAAAAAAAAAAAAAAAAAAAAADp8fN7cmSsqqMAAAD1+vu7nX7czbwAAADw4tTg tpD68uwAAAAAAAAAAAAAAAAAAADN6vGfwcZXPye6ubPm9PjU5uitgFXZxbH4/P3n zbXWnGnw28gAAAAAAAAAAAD8/v6z3+qv3emauLtYPyezwL/X7vTT5OWse07Tu6T4 /P3q1sPWnWnjvZv9+vcAAADi8/ev3emv3emv3emVrrBYQCi7zM3X7vTS4eGqdUXX wa34/P318+/esondr4UAAADF5u+v3emv3emv3emv3emJmZZnWEbX7vTX7vTDu6q0 hVv4/P34/P3u4NHZpnj7/f6w3emv3emv3emv3emv3emXsrVVOiHU6vDX7vS+qZC8 kmv4/P34/P3kw6Tpy7Ds9/qv3emv3emv3emv3emv3elycGOCem3X7vTW7PKpc0He z7/4/P33+fjXn2369O7d8fav3emv3emv3emv3emp091TNh25xMPX7vTHxbmrdEP3 +/v4/P3r2MXgt5AAAADO6vKv3emv3emv3emv3emHlZFjTjnX7vTX7vSzjWjNsJX4 /P34/P3dr4by4dEAAAC/5O2v3emv3emv3emv3eliUT2ZmI/X7vTR39+jZjDv7Of4 /P3y7OXYo3P//v4AAACrztav3emv3emv3embur5RNBnL3uHX7vS8qZC6kGr4/P34 /P3kxKbpy7AAAAAAAABiSzWjyM+v3emv3el3dmt4a1rX7vTX7fKoc0Lez7/4/P33 +fnXoG779O8AAAAAAACOe2pcRS6hxMqr1uBVOSCWb0zU5+rHxbmpcD7iv574+/zr 2Mfgt5AAAAAAAAAAAAD9/fyQfWtaQSl7f3VeQyu1hlywgVWvh2DMq4zZpHXhu5jd r4Xy4dEAAAAAAAAAAAAAAAD+/v6WhHRPMBWhkYL8+fe8kGiiZC317uj79O/ZpnfY o3P//v4AAAAAAAAAAAAAAAAAAAAAAACtnpLl4NwAAAD9/PvawasAAAAAAAD79vHw 28gAAAAAAAAAAAAAAADERwAAwAMAAIAAAACAAAAAgAAAAAAAAAAAAAAAAAEAAAAB AAAAAQAAAAMAAAADAAAABwAAAAcAAIAHAADkzwAA ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=shared.css Content-Type: text/css; name=shared.css Content-Location: http://bits.wikimedia.org/skins-1.5/common/shared.css?257z26 Content-Transfer-Encoding: 8bit /** * CSS in this file is used by *all* skins (that have any CSS at all). Be * careful what you put in here, since what looks good in one skin may not in * another, but don't ignore the poor non-Monobook users either. */ /* Colored watchlist and recent changes numbers */ .mw-plusminus-pos { color: #006400; } /* dark green */ .mw-plusminus-neg { color: #8b0000; } /* dark red */ .mw-plusminus-null { color: #aaa; } /* gray */ /* Comment and username portions of RC entries */ span.comment { font-style: italic; } span.changedby { font-size: 95%; } /* Math */ .texvc { direction: ltr; unicode-bidi: embed; } img.tex { vertical-align: middle; } span.texhtml { font-family: serif; } /* add a bit of margin space between the preview and the toolbar */ /* this replaces the ugly


we used to insert into the page source */ #wikiPreview.ontop { margin-bottom: 1em; } /* Stop floats from intruding into edit area in previews */ #editform, #toolbar, #wpTextbox1 { clear: both; } div#mw-js-message { margin: 1em 5%; padding: 0.5em 2.5%; border: solid 1px #ddd; background-color: #fcfcfc; } /* Edit section links */ .editsection { float: right; margin-left: 5px; } /** * File histories */ table.filehistory th, table.filehistory td { vertical-align:top; } table.filehistory th { text-align: left; } table.filehistory td.mw-imagepage-filesize, table.filehistory th.mw-imagepage-filesize { white-space:nowrap; } table.filehistory td.filehistory-selected { font-weight: bold; } /* * rev_deleted stuff */ li span.deleted, span.history-deleted { text-decoration: line-through; color: #888; font-style: italic; } /** * Patrol stuff */ .not-patrolled { background-color: #ffa; } .unpatrolled { font-weight: bold; color: red; } div.patrollink { font-size: 75%; text-align: right; } /** * Forms */ body.ltr td.mw-label { text-align: right; } body.ltr td.mw-input { text-align: left; } body.ltr td.mw-submit { text-align: left; } body.rtl td.mw-label { text-align: left; } body.rtl td.mw-input { text-align: right; } body.rtl td.mw-submit { text-align: right; } td.mw-label { vertical-align: top; } .prefsection td.mw-label { width: 20%; } .prefsection table { width: 100%; } td.mw-submit { white-space: nowrap; } table.mw-htmlform-nolabel td.mw-label { width: 0 !important; } /** * Image captions */ body.rtl .thumbcaption { text-align:right; } body.rtl .magnify { float:left; } body.ltr .thumbcaption { text-align:left; } body.ltr .magnify { float:right; } /** * Hidden categories */ .mw-hidden-cats-hidden { display: none; } .catlinks-allhidden { display: none; } /* Convenience links to edit block, delete and protect reasons */ p.mw-ipb-conveniencelinks, p.mw-protect-editreasons, p.mw-filedelete-editreasons, p.mw-delete-editreasons, p.mw-revdel-editreasons { font-size: 90%; float: right; } /* Search results */ .searchresults { } .searchresults p { margin-left: 0.4em; margin-top: 1em; margin-bottom: 1.2em; } div.searchresult { font-size: 95%; width:38em; } .mw-search-results { margin-left: 0.4em; } .mw-search-results li { padding-bottom: 1em; list-style:none; list-style-image:none; } .mw-search-results li a { font-size: 108%; } .mw-search-result-data { color: green; font-size: 97%; } .mw-search-formheader { background-color: #f3f3f3; margin-top: 1em; border: 1px solid silver; } .mw-search-formheader div.search-types { float:left; padding-left: 0.25em; } .rtl .mw-search-formheader div.search-types { float: right; } .mw-search-formheader div.search-types ul { margin: 0 !important; padding: 0 !important; list-style: none !important; } .mw-search-formheader div.search-types ul li { float: left; margin: 0; padding: 0; } .mw-search-formheader div.search-types ul li a { display: block; padding: 0.5em; } .mw-search-formheader div.search-types ul li.current a { color: #333333; cursor: default; } .mw-search-formheader div.search-types ul li.current a:hover { text-decoration: none; } .mw-search-formheader div.results-info { float: right; padding: 0.5em; padding-right: 0.75em; } .mw-search-formheader div.results-info ul { margin: 0 !important; padding: 0 !important; list-style: none !important; } .mw-search-formheader div.results-info ul li { float: right; margin: 0; padding: 0; } fieldset#mw-searchoptions { margin: 0; padding-left: 0.75em !important; padding-right: 0.75em !important; padding-bottom: 0.5em !important; padding-top: 0.5em !important; border: none; background-color: #f9f9f9; border: 1px solid silver !important; border-top-width: 0 !important; } fieldset#mw-searchoptions legend { display: none; } fieldset#mw-searchoptions h4 { padding: 0; margin: 0; float: left; } .rtl fieldset#mw-searchoptions h4 { float: right; } fieldset#mw-searchoptions div#mw-search-togglebox { float: right; } .rtl fieldset#mw-searchoptions div#mw-search-togglebox { float: left; } fieldset#mw-searchoptions div#mw-search-togglebox label { margin-right: 0.25em; } fieldset#mw-searchoptions div#mw-search-togglebox input { margin-left: 0.25em; } fieldset#mw-searchoptions table { float: left; margin-right: 3em; } fieldset#mw-searchoptions table td { padding-right: 1em; } .rtl fieldset#mw-searchoptions table td { padding-left: 1em; padding-right: 0; } body.rtl fieldset#mw-searchoptions table { margin-right: 0; margin-left: 3em; float: right; } fieldset#mw-searchoptions div.divider { clear: both; border-bottom: 1px solid #DDDDDD; padding-top: 0.5em; margin-bottom: 0.5em; } td#mw-search-menu { padding-left:6em; font-size:85%; } div#mw-search-interwiki { float: right; width: 18em; border-style: solid; border-color: #AAAAAA; border-width: 1px; margin-top: 2ex; } .rtl div#mw-search-interwiki { float: left; } div#mw-search-interwiki li { font-size: 95%; } .mw-search-interwiki-more { float: right; font-size: 90%; } .rtl .mw-search-interwiki-more { float: left; } div#mw-search-interwiki-caption { text-align: center; font-weight: bold; font-size: 95%; } .mw-search-interwiki-project { font-size: 97%; text-align: left; padding-left: 0.2em; padding-right: 0.15em; padding-bottom: 0.2em; padding-top: 0.15em; background-color:#ececec; border-top:1px solid #BBBBBB; } .rtl .mw-search-interwiki-project { text-align: right; } span.searchalttitle { font-size: 95%; } div.searchdidyoumean { font-size: 127%; margin-top: 0.8em; /* Note that this color won't affect the link, as desired. */ color: #c00; } div.searchdidyoumean em { font-weight: bold; } .searchmatch { font-weight: bold; } table#mw-search-top-table { background-color: transparent; } /* * Advanced PowerSearch box */ td#mw-search-togglebox { text-align: right; } table#mw-search-powertable { width:100%; } form#powersearch { clear: both; } /* * UserRights stuff */ .mw-userrights-disabled { color: #888; } table.mw-userrights-groups * td,table.mw-userrights-groups * th { padding-right: 1.5em; } /* * OpenSearch ajax suggestions */ .os-suggest { overflow: auto; overflow-x: hidden; position: absolute; top: 0px; left: 0px; width: 0px; background-color: white; background-color: Window; border-style: solid; border-color: #AAAAAA; border-width: 1px; z-index:99; font-size:95%; } table.os-suggest-results { font-size: 95%; cursor: pointer; border: 0; border-collapse: collapse; width: 100%; } .os-suggest-result, .os-suggest-result-hl { white-space: nowrap; background-color: white; background-color: Window; color: black; color: WindowText; padding: 2px; } .os-suggest-result-hl, .os-suggest-result-hl-webkit { background-color: #4C59A6; color: white; } .os-suggest-result-hl { /* System colors are misimplemented in Safari 3.0 and earlier, making highlighted text illegible... */ background-color: Highlight; color: HighlightText; } .os-suggest-toggle { position: relative; left: 1ex; font-size: 65%; } .os-suggest-toggle-def { position: absolute; top: 0px; left: 0px; font-size: 65%; visibility: hidden; } /* Page history styling */ /* the auto-generated edit comments */ .autocomment { color: gray; } #pagehistory .history-user { margin-left: 0.4em; margin-right: 0.2em; } #pagehistory span.minor { font-weight: bold; } #pagehistory li { border: 1px solid white; } #pagehistory li.selected { background-color: #f9f9f9; border: 1px dashed #aaa; } /** Generic minor/bot/newpage styling */ .newpage, .minor, .bot { font-weight: bold; } /* Special:Contributions styling */ .mw-uctop { font-weight: bold; } /* Special:ListGroupRights styling */ table.mw-listgrouprights-table tr { vertical-align: top; } .listgrouprights-revoked { text-decoration: line-through; } /* Special:Statistics styling */ td.mw-statistics-numbers { text-align: right; } /* Special:SpecialPages styling */ h4.mw-specialpagesgroup { background-color: #dcdcdc; padding: 2px; margin: .3em 0em 0em 0em; } .mw-specialpagerestricted { font-weight: bold; } #shared-image-dup, #shared-image-conflict { font-style: italic; } /* Special:EmailUser styling */ table.mw-emailuser-table { width: 98%; } td#mw-emailuser-sender, td#mw-emailuser-recipient { font-weight: bold; } /* Special:Allpages styling */ table.allpageslist { background-color: transparent; } table.mw-allpages-table-form, table.mw-allpages-table-chunk { background-color: transparent; width: 100%; } td.mw-allpages-alphaindexline { text-align: right; } td.mw-allpages-nav, p.mw-allpages-nav { text-align: right; font-size: smaller; margin-bottom: 1em; } table.mw-allpages-table-form tr { vertical-align: top; } /* Special:Prefixindex styling */ table#mw-prefixindex-list-table, table#mw-prefixindex-nav-table { width: 98%; background-color: transparent; } td#mw-prefixindex-nav-form { font-size: smaller; margin-bottom: 1em; text-align: right; vertical-align: top; } /* * Recreating deleted page warning * Reupload file warning * Page protection warning * incl. log entries for these warnings */ div.mw-warning-with-logexcerpt { padding: 3px; margin-bottom: 3px; border: 2px solid #2F6FAB; } div.mw-warning-with-logexcerpt ul li { font-size: 90%; } /* (show/hide) revision deletion links */ span.mw-revdelundel-link, strong.mw-revdelundel-link { font-size: 90%; } span.mw-revdelundel-hidden, input.mw-revdelundel-hidden { visibility: hidden; } /* feed links */ a.feedlink { background: url("images/feed-icon.png") center left no-repeat; padding-left: 16px; } /* Plainlinks - this can be used to switch * off special external link styling */ .plainlinks a { background: none !important; padding: 0 !important; } /* wikitable class for skinning normal tables */ table.wikitable { margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; } .wikitable th, .wikitable td { border: 1px #aaa solid; padding: 0.2em; } .wikitable th { background: #f2f2f2; text-align: center; } .wikitable caption { font-weight: bold; } /* hide initially collapsed collapsable tables */ table.collapsed tr.collapsable { display: none; } /* success and error messages */ .success { color: green; font-size: larger; } .error { color: red; font-size: larger; } .errorbox, .successbox { font-size: larger; border: 2px solid; padding: .5em 1em; float: left; margin-bottom: 2em; color: #000; } .errorbox { border-color: red; background-color: #fff2f2; } .successbox { border-color: green; background-color: #dfd; } .errorbox h2, .successbox h2 { font-size: 1em; font-weight: bold; display: inline; margin: 0 .5em 0 0; border: none; } .visualClear { clear: both; } #mw_trackbacks { border: solid 1px #bbbbff; background-color: #eeeeff; padding: 0.2em; } /* Table pager (e.g. Special:Imagelist) - remove underlines from the navigation link - collapse borders - set the borders to outsets (similar to Special:Allmessages) - remove line wrapping for all td and th, set background color - restore line wrapping for the last two table cells (description and size) */ .TablePager { min-width: 80%; } .TablePager_nav a { text-decoration: none; } .TablePager { border-collapse: collapse; } .TablePager, .TablePager td, .TablePager th { border: 1px solid #aaaaaa; padding: 0 0.15em 0 0.15em; } .TablePager th { background-color: #eeeeff } .TablePager td { background-color: #ffffff } .TablePager tr:hover td { background-color: #eeeeff } .imagelist td, .imagelist th { white-space: nowrap } .imagelist .TablePager_col_links { background-color: #eeeeff } .imagelist .TablePager_col_img_description { white-space: normal } .imagelist th.TablePager_sort { background-color: #ccccff } /* Allmessages table */ #mw-allmessagestable .allmessages-customised td.am_default { background-color: #fcffc4; } #mw-allmessagestable tr.allmessages-customised:hover td.am_default { background-color: #faff90; } #mw-allmessagestable td.am_actual { background-color: #e2ffe2; } #mw-allmessagestable tr.allmessages-customised:hover + tr.allmessages-customised td.am_actual { background-color: #b1ffb1; } /* filetoc */ ul#filetoc { text-align: center; border: 1px solid #aaaaaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; margin-bottom: 0.5em; margin-left: 0; margin-right: 0; } #filetoc li { display: inline; list-style-type: none; padding-right: 2em; } /* Classes for EXIF data display */ table.mw_metadata { font-size: 0.8em; margin-left: 0.5em; margin-bottom: 0.5em; width: 300px; } table.mw_metadata caption { font-weight: bold; } table.mw_metadata th { font-weight: normal; } table.mw_metadata td { padding: 0.1em; } table.mw_metadata { border: none; border-collapse: collapse; } table.mw_metadata td, table.mw_metadata th { text-align: center; border: 1px solid #aaaaaa; padding-left: 0.1em; padding-right: 0.1em; } table.mw_metadata th { background-color: #f9f9f9; } table.mw_metadata td { background-color: #fcfcfc; } /* Galleries */ table.gallery { border: 1px solid #ccc; margin: 2px; padding: 2px; background-color: white; } table.gallery tr { vertical-align: top; } table.gallery td { vertical-align: top; background-color: #f9f9f9; border: solid 2px white; } table.gallery caption { font-weight: bold; } div.gallerybox { margin: 2px; } div.gallerybox div.thumb { text-align: center; border: 1px solid #ccc; margin: 2px; } div.gallerytext { overflow: hidden; font-size: 94%; padding: 2px 4px; } table.mw-enhanced-rc { background: none; border:0; border-spacing:0; } td.mw-enhanced-rc { white-space:nowrap; padding:0; vertical-align:top; font-family:monospace } #mw-addcategory-prompt { display: inline; margin-left: 1em; } #mw-addcategory-prompt input { margin-left: 0.5em; margin-right: 0.5em; } .mw-remove-category { padding: 8px; background-image: url(images/remove.png); background-position: center center; background-repeat: no-repeat; } .mw-ajax-addcategory { padding-left: 20px; background-image: url(images/add.png); background-position: left center; background-repeat: no-repeat; } .mw-ajax-loader { background-image: url(images/ajax-loader.gif); background-position: center center; background-repeat: no-repeat; padding: 16px; position: relative; top: -16px; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=commonPrint.css Content-Type: text/css; name=commonPrint.css Content-Location: http://bits.wikimedia.org/skins-1.5/common/commonPrint.css?257z26 Content-Transfer-Encoding: 8bit /* ** MediaWiki Print style sheet for CSS2-capable browsers. ** Copyright Gabriel Wicke, http://www.aulinx.de/ ** ** Derived from the plone (http://plone.org/) styles ** Copyright Alexander Limi */ /* Thanks to A List Apart (http://alistapart.com/) for useful extras */ a.stub, a.new{ color:#ba0000; text-decoration:none; } #toc { /*border:1px solid #2f6fab;*/ border:1px solid #aaaaaa; background-color:#f9f9f9; padding:5px; } .tocindent { margin-left: 2em; } .tocline { margin-bottom: 0px; } /* images */ div.floatright { float: right; clear: right; margin: 0; position:relative; border: 0.5em solid White; border-width: 0.5em 0 0.8em 1.4em; } div.floatright p { font-style: italic;} div.floatleft { float: left; margin: 0.3em 0.5em 0.5em 0; position:relative; border: 0.5em solid White; border-width: 0.5em 1.4em 0.8em 0; } div.floatleft p { font-style: italic; } /* thumbnails */ div.thumb { margin-bottom: 0.5em; border-style: solid; border-color: White; width: auto; overflow: hidden; } div.thumb div { border:1px solid #cccccc; padding: 3px !important; background-color:#f9f9f9; font-size: 94%; text-align: center; } div.thumb div a img { border:1px solid #cccccc; } div.thumb div div.thumbcaption { border: none; padding: 0.3em 0 0.1em 0; } div.magnify { display: none; } div.tright { float: right; clear: right; border-width: 0.5em 0 0.8em 1.4em; } div.tleft { float: left; margin-right:0.5em; border-width: 0.5em 1.4em 0.8em 0; } img.thumbborder { border: 1px solid #dddddd; } /* table standards */ table.rimage { float:right; width:1pt; position:relative; margin-left:1em; margin-bottom:1em; text-align:center; } body { background: White; /*font-size: 11pt !important;*/ color: Black; margin: 0; padding: 0; } .noprint, div#jump-to-nav, div.top, div#column-one, #colophon, .editsection, .toctoggle, .tochidden, div#f-poweredbyico, div#f-copyrightico, li#viewcount, li#about, li#disclaimer, li#privacy, #mw-hidden-catlinks { /* Hides all the elements irrelevant for printing */ display: none; } ul { list-style-type: square; } #content { background: none; border: none ! important; padding: 0 ! important; margin: 0 ! important; } #footer { background : white; color : black; border-top: 1px solid black; } h1, h2, h3, h4, h5, h6 { font-weight: bold; } p, .documentDescription { margin: 1em 0 ! important; line-height: 1.2em; } .tocindent p { margin: 0 0 0 0 ! important; } pre { border: 1pt dashed black; white-space: pre; font-size: 8pt; overflow: auto; padding: 1em 0; background : white; color : black; } table.listing, table.listing td { border: 1pt solid black; border-collapse: collapse; } a { color: Black !important; background: none !important; padding: 0 !important; } a:link, a:visited { color: #520; background: transparent; text-decoration: underline; } #content a.external.text:after, #content a.external.autonumber:after { /* Expand URLs for printing */ content: " (" attr(href) ") "; } #globalWrapper { width: 100% !important; min-width: 0 !important; } #content { background : white; color : black; } #column-content { margin: 0 !important; } #column-content #content { padding: 1em; margin: 0 !important; } /* MSIE/Win doesn't understand 'inherit' */ a, a.external, a.new, a.stub { color: black ! important; text-decoration: none ! important; } /* Continue ... */ a, a.external, a.new, a.stub { color: inherit ! important; text-decoration: inherit ! important; } img { border: none; } img.tex { vertical-align: middle; } span.texhtml { font-family: serif; } #siteNotice { display: none; } div.gallerybox { border: 1px solid #cccccc; background-color:#f9f9f9; width: 150px; } div.gallerytext { overflow: visible; } /* ** Diff rendering */ table.diff { background:white; } td.diff-otitle { background:#ffffff; } td.diff-ntitle { background:#ffffff; } td.diff-addedline { background:#ccffcc; font-size: smaller; border: solid 2px black; } td.diff-deletedline { background:#ffffaa; font-size: smaller; border: dotted 2px black; } td.diff-context { background:#eeeeee; font-size: smaller; } .diffchange { color: silver; font-weight: bold; text-decoration: underline; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://bits.wikimedia.org/skins-1.5/monobook/headbg.jpg Content-Transfer-Encoding: Base64 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 pqmqalFqtJUGrOhqk4mqUtJqampqa/RqapquqRhbcdOIbqoSWMoZnG01aiZjs3Gf tdoO6lFFFFFFFFJRRRRRytyX9LwVBqmpqUclytrcHACgBSUqKJRRQALZYAFFABQB SUUUlFFHK2XClAAAFABCoUAAAABQAFACoFAqKAhl2c6KXHu6AiZdkpKWkprGFopR FSlAEUAARQAAABFEVAAAKKKKKKAKKTU1TU1KkAoqDWDWE1NTU0NTQ1NV1gqFSWZT WzU1NTU1KWpOVv6WxSiiiiiikoooooooXkDgoopKWjkF4ABRAoACgABQBAUAEKKK KSiilLAoAFBBQAAAAAARQAQUAAAEyZoopfLVgkpRQUsKAAAAAAAAAAAAAFAUUUUU UUUUUUUAAAUUUmpRRRQFFFFFAJRRqUUUUUUUUUUampRSgBRRRRRRRRRRRRRQKBRS UUUoAABRQAUAFAAAFFABRRRRQFFFAFFFAUUAUACoUUFAABQAUAAUAoIqSlFFFLEK gUUUUAAoAioqCoKICiCgAAAAAAAAAAAAAAAIogKAAAAIoAigAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAD//Z ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: image/gif Content-Location: http://bits.wikimedia.org/skins-1.5/monobook/bullet.gif Content-Transfer-Encoding: Base64 R0lGODlhBQANAIAAAGOMnP///yH5BAEAAAEALAAAAAAFAA0AAAIJjI+pu+APo4Sp ADs= ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: image/png Content-Location: http://bits.wikimedia.org/skins-1.5/monobook/external.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAFVBMVEVmmcwzmcyZ zP8AZswAZv////////9E6giVAAAAB3RSTlP///////8AGksDRgAAADhJREFUGFcl y0ESAEAEA0Ei6/9P3sEcVB8kmrwFyni0bOeyyDpy9JTLEaOhQq7Ongf5FeMhHS/4 AVnsAZubxDVmAAAAAElFTkSuQmCC ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: image/gif Content-Location: http://bits.wikimedia.org/skins-1.5/monobook/user.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAKU5AFtJMlpJNFxIMU5OTm2XH3aIVJNkK5FmMJZnPbt6NIZzXId0 XpVwQZRzR5p7VI1+baZ3Tdl+Kt1/LIO2JYe5K4q8M4idYZKBbJK/QLqddZfDR5rF TZ/HVqfMZanNacKVWuKVQ+ejVuelVu21bPC/e5+XjKOjo7rXhr3aiM+1kNi4icff m8rio83jqNHmrtXotOPEl/HDg/LKjvfaq/ngut3Z1Nvrwd/tx/vqz/////////// /////////////////yH5BAEAAD8ALAAAAAAQABAAAAZiwJ9wSCwafxfF5VhUNBgH AVO4cKRgHwNg+sjQZrFEYFpSyUihyGD6M4lAEgRbCKnPTaYRjjRYH00vLAUkFhoV fkQmNy4rJxYcGBQTiEImNi0TKB0bHgSTRX2hon1zpaanP0EAOw== ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=main.css Content-Type: text/css; name=main.css Content-Location: http://bits.wikimedia.org/skins-1.5/monobook/main.css?257z26 Content-Transfer-Encoding: 8bit /* ** MediaWiki 'monobook' style sheet for CSS2-capable browsers. ** Copyright Gabriel Wicke - http://wikidev.net/ ** License: GPL (http://www.gnu.org/copyleft/gpl.html) ** ** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John ** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher, ** Michael Zeltner and Geir Bækholt) ** All you guys rock :) */ #column-content { width: 100%; float: right; margin: 0 0 .6em -12.2em; padding: 0; } #content { margin: 2.8em 0 0 12.2em; padding: 0 1em 1em 1em; position: relative; z-index: 2; } #column-one { padding-top: 160px; } #content { background: white; color: black; border: 1px solid #aaa; border-right: none; line-height: 1.5em; } /* the left column width is specified in class .portlet */ /* Font size: ** We take advantage of keyword scaling- browsers won't go below 9px ** More at http://www.w3.org/2003/07/30-font-size ** http://style.cleverchimp.com/font_size_intervals/altintervals.html */ body { font: x-small sans-serif; background: #f9f9f9 url(headbg.jpg) 0 0 no-repeat; color: black; margin: 0; padding: 0; } /* scale back up to a sane default */ #globalWrapper { font-size: 127%; width: 100%; margin: 0; padding: 0; } /* general styles */ table { font-size: 100%; color: black; /* we don't want the bottom borders of

s to be visible through floated tables */ background-color: white; } fieldset table { /* but keep table layouts in forms clean... */ background: none; } a { text-decoration: none; color: #002bb8; background: none; } a:visited { color: #5a3696; } a:active { color: #faa700; } a:hover { text-decoration: underline; } a.stub { color: #772233; } a.new, #p-personal a.new { color: #ba0000; } a.new:visited, #p-personal a.new:visited { color: #a55858; } img { border: none; vertical-align: middle; } p { margin: .4em 0 .5em 0; line-height: 1.5em; } p img { margin: 0; } hr { height: 1px; color: #aaa; background-color: #aaa; border: 0; margin: .2em 0 .2em 0; } h1, h2, h3, h4, h5, h6 { color: black; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } h1 { font-size: 188%; } h1 .editsection { font-size: 53%; } h2 { font-size: 150%; } h2 .editsection { font-size: 67%; } h3, h4, h5, h6 { border-bottom: none; font-weight: bold; } h3 { font-size: 132%; } h3 .editsection { font-size: 76%; font-weight: normal; } h4 { font-size: 116%; } h4 .editsection { font-size: 86%; font-weight: normal; } h5 { font-size: 100%; } h5 .editsection { font-weight: normal; } h6 { font-size: 80%; } h6 .editsection { font-size: 125%; font-weight: normal; } ul { line-height: 1.5em; list-style-type: square; margin: .3em 0 0 1.5em; padding: 0; list-style-image: url(bullet.gif); } ol { line-height: 1.5em; margin: .3em 0 0 3.2em; padding: 0; list-style-image: none; } li { margin-bottom: .1em; } dt { font-weight: bold; margin-bottom: .1em; } dl { margin-top: .2em; margin-bottom: .5em; } dd { line-height: 1.5em; margin-left: 2em; margin-bottom: .1em; } fieldset { border: 1px solid #2f6fab; margin: 1em 0 1em 0; padding: 0 1em 1em; line-height: 1.5em; } fieldset.nested { margin: 0 0 0.5em 0; padding: 0 0.5em 0.5em; } legend { padding: .5em; font-size: 95%; } form { border: none; margin: 0; } textarea { width: 100%; padding: .1em; } input.historysubmit { padding: 0 .3em .3em .3em !important; font-size: 94%; cursor: pointer; height: 1.7em !important; margin-left: 1.6em; } select { vertical-align: top; } abbr, acronym, .explain { border-bottom: 1px dotted black; color: black; background: none; cursor: help; } q { font-family: Times, "Times New Roman", serif; font-style: italic; } /* disabled for now blockquote { font-family: Times, "Times New Roman", serif; font-style: italic; }*/ code { background-color: #f9f9f9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #f9f9f9; line-height: 1.1em; } /* ** the main content area */ #siteSub { display: none; } #jump-to-nav { display: none; } #contentSub, #contentSub2 { font-size: 84%; line-height: 1.2em; margin: 0 0 1.4em 1em; color: #7d7d7d; width: auto; } span.subpages { display: block; } /* Some space under the headers in the content area */ #bodyContent h1, #bodyContent h2 { margin-bottom: .6em; } #bodyContent h3, #bodyContent h4, #bodyContent h5 { margin-bottom: .3em; } #firstHeading { margin-bottom: .1em; /* These two rules hack around bug 2013 (fix for more limited bug 11325). When bug 2013 is fixed properly, they should be removed. */ line-height: 1.2em; padding-bottom: 0; } /* user notification thing */ .usermessage { background-color: #ffce7b; border: 1px solid #ffa500; color: black; font-weight: bold; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; } #siteNotice { text-align: center; font-size: 95%; padding: 0 0.9em; } #siteNotice p { margin: 0; padding: 0; } .catlinks { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; margin-top: 1em; clear: both; } /* currently unused, intended to be used by a metadata box in the bottom-right corner of the content area */ .documentDescription { /* The summary text describing the document */ font-weight: bold; display: block; margin: 1em 0; line-height: 1.5em; } .documentByLine { text-align: right; font-size: 90%; clear: both; font-weight: normal; color: #76797c; } /* emulate center */ .center { width: 100%; text-align: center; } *.center * { margin-left: auto; margin-right: auto; } /* small for tables and similar */ .small, .small * { font-size: 94%; } table.small { font-size: 100%; } /* ** content styles */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; } #toc h2, .toc h2 { display: inline; border: none; padding: 0; font-size: 100%; font-weight: bold; } #toc #toctitle, .toc #toctitle, #toc .toctitle, .toc .toctitle { text-align: center; } #toc ul, .toc ul { list-style-type: none; list-style-image: none; margin-left: 0; padding-left: 0; text-align: left; } #toc ul ul, .toc ul ul { margin: 0 0 0 2em; } #toc .toctoggle, .toc .toctoggle { font-size: 94%; } .mw-warning { margin-left: 50px; margin-right: 50px; text-align: center; } /* images */ div.floatright, table.floatright { clear: right; float: right; position: relative; margin: 0 0 .5em .5em; border: 0; /* border: .5em solid white; border-width: .5em 0 .8em 1.4em; */ } div.floatright p { font-style: italic; } div.floatleft, table.floatleft { float: left; clear: left; position: relative; margin: 0 .5em .5em 0; border: 0; /* margin: .3em .5em .5em 0; border: .5em solid white; border-width: .5em 1.4em .8em 0; */ } div.floatleft p { font-style: italic; } /* thumbnails */ div.thumb { margin-bottom: .5em; border-style: solid; border-color: white; width: auto; } div.thumbinner { border: 1px solid #ccc; padding: 3px !important; background-color: #f9f9f9; font-size: 94%; text-align: center; overflow: hidden; } html .thumbimage { border: 1px solid #ccc; } html .thumbcaption { border: none; text-align: left; line-height: 1.4em; padding: 3px !important; font-size: 94%; } div.magnify { float: right; border: none !important; background: none !important; } div.magnify a, div.magnify img { display: block; border: none !important; background: none !important; } div.tright { clear: right; float: right; border-width: .5em 0 .8em 1.4em; } div.tleft { float: left; clear: left; margin-right: .5em; border-width: .5em 1.4em .8em 0; } img.thumbborder { border: 1px solid #dddddd; } .hiddenStructure { display: none; } /* ** classes for special content elements like town boxes ** intended to be referenced directly from the wiki src */ /* ** User styles */ /* table standards */ table.rimage { float: right; position: relative; margin-left: 1em; margin-bottom: 1em; text-align: center; } .toccolours { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; } /* ** edit views etc */ .special li { line-height: 1.4em; margin: 0; padding: 0; } /* ** keep the whitespace in front of the ^=, hides rule from konqueror ** this is css3, the validator doesn't like it when validating as css2 */ #bodyContent a.external, #bodyContent a.external[href ^="gopher://"] { background: url(external.png) center right no-repeat; padding: 0 13px; } .rtl #bodyContent a.external, .rtl #bodyContent a.external[href ^="gopher://"] { background-image: url(external-rtl.png); } #bodyContent a.external[href ^="https://"], .link-https { background: url(lock_icon.gif) center right no-repeat; padding: 0 16px; } #bodyContent a.external[href ^="mailto:"], .link-mailto { background: url(mail_icon.gif) center right no-repeat; padding: 0 18px; } #bodyContent a.external[href ^="news://"] { background: url(news_icon.png) center right no-repeat; padding: 0 18px; } #bodyContent a.external[href ^="ftp://"], .link-ftp { background: url(file_icon.gif) center right no-repeat; padding: 0 18px; } #bodyContent a.external[href ^="irc://"], .link-irc { background: url(discussionitem_icon.gif) center right no-repeat; padding: 0 18px; } #bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"], #bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"], #bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"], #bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"], #bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"], #bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"], .link-audio { background: url("audio.png") center right no-repeat; padding: 0 13px; } #bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"], #bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"], #bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"], #bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"], .link-video { background: url("video.png") center right no-repeat; padding: 0 13px; } #bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"], #bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"], #bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"], .link-document { background: url("document.png") center right no-repeat; padding: 0 12px; } /* for rtl wikis */ .rtl #bodyContent a.external { background-position: left; padding-right: 0; } .rtl a.feedlink { background-position: right; padding-right: 16px; padding-left: 0; } /* correction for ltr wikis */ .ltr #bodyContent a.external { padding-left: 0; } /* disable interwiki styling */ #bodyContent a.extiw, #bodyContent a.extiw:active { color: #36b; } #bodyContent a.external { color: #36b; } /* ** Structural Elements */ /* ** general portlet styles (elements in the quickbar) */ .portlet { border: none; margin: 0 0 .5em; padding: 0; float: none; width: 11.6em; overflow: hidden; } .portlet h4 { font-size: 95%; font-weight: normal; white-space: nowrap; } .portlet h5 { background: transparent; padding: 0 1em 0 .5em; display: inline; height: 1em; text-transform: lowercase; font-size: 91%; font-weight: normal; white-space: nowrap; } .portlet h6 { background: #ffae2e; border: 1px solid #2f6fab; border-style: solid solid none solid; padding: 0 1em 0 1em; text-transform: lowercase; display: block; font-size: 1em; height: 1.2em; font-weight: normal; white-space: nowrap; } .pBody { font-size: 95%; background-color: white; color: black; border-collapse: collapse; border: 1px solid #aaa; padding: 0 .8em .3em .5em; } .portlet h1, .portlet h2, .portlet h3, .portlet h4 { margin: 0; padding: 0; } .portlet ul { line-height: 1.5em; list-style-type: square; list-style-image: url(bullet.gif); font-size: 95%; } .portlet li { padding: 0; margin: 0; } /* ** Logo properties */ #p-logo { top: 0; left: 0; position: absolute; /*needed to use z-index */ z-index: 3; height: 155px; width: 12em; overflow: visible; } #p-logo h5 { display: none; } #p-logo a, #p-logo a:hover { display: block; height: 155px; width: 12.2em; background-repeat: no-repeat; background-position: 35% 50% !important; text-decoration: none; } /* ** Search portlet */ #p-search { position: relative; z-index: 3; } input.searchButton { margin-top: 1px; font-size: 95%; } #searchGoButton { padding-left: .5em; padding-right: .5em; font-weight: bold; } #searchInput { width: 10.9em; margin: 0; font-size: 95%; } #p-search .pBody { padding: .5em .4em .4em .4em; text-align: center; } #p-search #searchform div div { margin-top: .4em; font-size: 95%; } /* ** the personal toolbar */ #p-personal { position: absolute; left: 0; top: 0; z-index: 0; } #p-personal { width: 100%; white-space: nowrap; padding: 0; margin: 0; border: none; background: none; overflow: visible; line-height: 1.2em; } #p-personal h5 { display: none; } #p-personal .portlet, #p-personal .pBody { z-index: 0; padding: 0; margin: 0; border: none; overflow: visible; background: none; } /* this is the ul contained in the portlet */ #p-personal ul { border: none; line-height: 1.4em; color: #2f6fab; padding: 0 2em 0 3em; margin: 0; text-align: right; list-style: none; z-index: 0; background: none; cursor: default; } #p-personal li { z-index: 0; border: none; padding: 0; display: inline; color: #2f6fab; margin-left: 1em; line-height: 1.2em; background: none; } #p-personal li a { text-decoration: none; color: #005896; padding-bottom: .2em; background: none; } #p-personal li a:hover { background-color: white; padding-bottom: .2em; text-decoration: none; } #p-personal li.active a:hover { background-color: transparent; } /* the icon in front of the user name, single quotes in bg url to hide it from iemac */ li#pt-userpage, li#pt-anonuserpage, li#pt-login { background: url(user.gif) top left no-repeat; padding-left: 20px; text-transform: none; } #p-personal ul { text-transform: lowercase; } #p-personal li.active { font-weight: bold; } /* ** the page-related actions- page/talk, edit etc */ #p-cactions { position: absolute; top: 1.3em; left: 11.5em; margin: 0; white-space: nowrap; width: 76%; line-height: 1.1em; overflow: visible; background: none; border-collapse: collapse; padding-left: 1em; list-style: none; font-size: 95%; } #p-cactions ul { list-style: none; } #p-cactions li { display: inline; border: 1px solid #aaa; border-bottom: none; padding: 0 0 .1em 0; margin: 0 .3em 0 0; overflow: visible; background: white; } #p-cactions li.selected { border-color: #fabd23; padding: 0 0 .2em 0; font-weight: bold; } #p-cactions li a { background-color: #fbfbfb; color: #002bb8; border: none; padding: 0 .8em .3em; position: relative; z-index: 0; margin: 0; text-decoration: none; } #p-cactions li.selected a { z-index: 3; padding: 0 1em .2em!important; background-color: white; } #p-cactions .new a { color: #ba0000; } #p-cactions li a:hover { z-index: 3; text-decoration: none; background-color: white; } #p-cactions h5 { display: none; } #p-cactions li.istalk { margin-right: 0; } #p-cactions li.istalk a { padding-right: .5em; } #p-cactions #ca-addsection a { padding-left: .4em; padding-right: .4em; } /* offsets to distinguish the tab groups */ li#ca-talk { margin-right: 1.6em; } li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print { margin-left: 1.6em; } #p-cactions .pBody { font-size: 1em; background-color: transparent; color: inherit; border-collapse: inherit; border: 0; padding: 0; } #p-cactions .hiddenStructure { display: none; } #p-cactions li a { text-transform: lowercase; } #p-lang { position: relative; z-index: 3; } /* Override text-transform on languages where capitalization is significant */ .capitalize-all-nouns .portlet h5, .capitalize-all-nouns .portlet h6, .capitalize-all-nouns #p-personal ul, .capitalize-all-nouns #p-cactions ul li a { text-transform: none; } /* TODO: #t-iscite is only used by the Cite extension, come up with some * system which allows extensions to add to this file on the fly */ #t-ispermalink, #t-iscite { color: #999; } /* ** footer */ #footer { background-color: white; border-top: 1px solid #fabd23; border-bottom: 1px solid #fabd23; margin: .6em 0 1em 0; padding: .4em 0 1.2em 0; text-align: center; font-size: 90%; } #footer li { display: inline; margin: 0 1.3em; } #f-poweredbyico, #f-copyrightico { margin: 0 8px; position: relative; top: -2px; /* Bump it up just a tad */ } #f-poweredbyico { float: right; height: 1%; } #f-copyrightico { float: left; height: 1%; } .mw-htmlform-submit { font-weight: bold; padding-left: .3em; padding-right: .3em; margin-right: 2em; } /* js pref toc */ #preftoc { margin: 0; padding: 0; width: 100%; clear: both; } #preftoc li { background-color: #f0f0f0; color: #000; } #preftoc li { margin: 1px -2px 1px 2px; float: left; padding: 2px 0 3px 0; border: 1px solid #fff; border-right-color: #716f64; border-bottom: 0; position: relative; white-space: nowrap; list-style-type: none; list-style-image: none; z-index: 3; } #preftoc li.selected { font-weight: bold; background-color: #f9f9f9; border: 1px solid #aaa; border-bottom: none; cursor: default; top: 1px; padding-top: 2px; margin-right: -3px; } #preftoc > li.selected { top: 2px; } #preftoc a, #preftoc a:active { display: block; color: #000; padding: 0 .7em; position: relative; text-decoration: none; } #preftoc li.selected a { cursor: default; text-decoration: none; } #preferences { margin: 0; border: 1px solid #aaa; clear: both; padding: 1.5em; background-color: #F9F9F9; } .prefsection { border: none; padding: 0; margin: 0; } .prefsection legend { font-weight: bold; } .prefsection table, .prefsection legend { background-color: #F9F9F9; } .mainLegend { display: none; } td.htmlform-tip { font-size: x-small; padding: .2em 2em; color: #666; } .preferences-login { clear: both; margin-bottom: 1.5em; } .prefcache { font-size: 90%; margin-top: 2em; } div#userloginForm form, div#userlogin form#userlogin2 { margin: 0 3em 1em 0; border: 1px solid #aaa; clear: both; padding: 1.5em 2em; background-color: #f9f9f9; float: left; } .rtl div#userloginForm form, .rtl div#userlogin form#userlogin2 { float: right; } div#userloginForm table, div#userlogin form#userlogin2 table { background-color: #f9f9f9; } div#userloginForm h2, div#userlogin form#userlogin2 h2 { padding-top: 0; } div#userlogin .captcha, div#userloginForm .captcha { border: 1px solid #bbb; padding: 1.5em 2em; background-color: white; } #loginend, #signupend { clear: both; } #userloginprompt, #languagelinks { font-size: 85%; } #login-sectiontip { font-size: 85%; line-height: 1.2; padding-top: 2em; } #userlogin .loginText, #userlogin .loginPassword { width: 12em; } #userloginlink a, #wpLoginattempt, #wpCreateaccount { font-weight: bold; } /* ** IE/Mac fixes, hope to find a validating way to move this ** to a separate stylesheet. This would work but doesn't validate: ** @import("IEMacFixes.css"); */ /* tabs: border on the a, not the div */ * > html #p-cactions li { border: none; } * > html #p-cactions li a { border: 1px solid #aaa; border-bottom: none; } * > html #p-cactions li.selected a { border-color: #fabd23; } /* footer icons need a fixed width */ * > html #f-poweredbyico, * > html #f-copyrightico { width: 88px; } * > html #bodyContent, * > html #bodyContent pre { overflow-x: auto; width: 100%; padding-bottom: 25px; } /* more IE fixes */ /* float/negative margin brokenness */ * html #footer {margin-top: 0;} * html #column-content { display: inline; margin-bottom: 0; } * html div.editsection { font-size: smaller; } #pagehistory li.selected { position: relative; } /* Mac IE 5.0 fix; floated content turns invisible */ * > html #column-content { float: none; } * > html #column-one { position: absolute; left: 0; top: 0; } * > html #footer { margin-left: 13.2em; } .redirectText { font-size: 150%; margin: 5px; } .printfooter { display: none; } div.patrollink { clear: both; } .sharedUploadNotice { font-style: italic; } span.updatedmarker { color: black; background-color: #0f0; } .previewnote { color: #c00; margin-bottom: 1em; } .previewnote p { text-indent: 3em; margin: 0.8em 0; } .editExternally { border: 1px solid gray; background-color: #ffffff; padding: 3px; margin-top: 0.5em; float: left; font-size: small; text-align: center; } .editExternallyHelp { font-style: italic; color: gray; } .toggle { margin-left: 2em; text-indent: -2em; } input#wpSummary { width: 80%; } /* @bug 1714 */ input#wpSave, input#wpDiff { margin-right: 0.33em; } #wpSave { font-weight: bold; } /* Classes for article validation */ table.revisionform_default { border: 1px solid #000000; } table.revisionform_focus { border: 1px solid #000000; background-color:#00BBFF; } tr.revision_tr_default { background-color:#EEEEEE; } tr.revision_tr_first { background-color:#DDDDDD; } p.revision_saved { color: green; font-weight:bold; } /* noarticletext */ div.noarticletext { border: 1px solid #ccc; background: #fff; padding: .2em 1em; color: #000; } div#searchTargetContainer { left: 10px; top: 10px; width: 90%; background: white; } div#searchTarget { padding: 3px; margin: 5px; background: #F0F0F0; border: solid 1px blue; } div#searchTarget ul li { list-style: none; } div#searchTarget ul li:before { color: orange; content: "\00BB \0020"; } div#searchTargetHide { float:right; border:solid 1px black; background:#DCDCDC; padding:2px; } #powersearch p { margin-top:0px; } div.multipageimagenavbox { border: solid 1px silver; padding: 4px; margin: 1em; background: #f0f0f0; } div.multipageimagenavbox div.thumb { border: none; margin-left: 2em; margin-right: 2em; } div.multipageimagenavbox hr { margin: 6px; } table.multipageimage td { text-align: center; } .templatesUsed { margin-top: 1.5em; } .mw-summary-preview { margin: 0.1em 0; } /* Friendlier slave lag warnings */ div.mw-lag-warn-normal, div.mw-lag-warn-high { padding: 3px; text-align: center; margin: 3px auto; } div.mw-lag-warn-normal { border: 1px solid #FFCC66; background-color: #FFFFCC; } div.mw-lag-warn-high { font-weight: bold; border: 2px solid #FF0033; background-color: #FFCCCC; } .MediaTransformError { background-color: #ccc; padding: 0.1em; } .MediaTransformError td { text-align: center; vertical-align: middle; font-size: 90%; } /* God-damned hack for the crappy layout */ .os-suggest { font-size: 127%; } /* Sometimes people don't want personal tools to be lowercase! */ .no-text-transform { text-transform: none; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=main.css Content-Type: text/css; name=main.css Content-Location: http://bits.wikimedia.org/skins-1.5/chick/main.css?257z26 Content-Transfer-Encoding: 8bit /* ** MediaWiki 'chick' style sheet for PDAs or other small-screen devices. ** Copyright Timwi ** License: GPL (http://www.gnu.org/copyleft/gpl.html) ** ** Loosely based on Monobook by Gabriel Wicke */ body { font-family: sans-serif; color: Black; margin: 0; padding: 0.3em; } a { color: #002bb8; } a:visited { color: #5a3696; } a:active { color: #ffa500; } a.stub { color: #772233; } a.new, #p-personal a.new { color:#ba0000; } a.new:visited, #p-personal a.new:visited { color:#a55858; } img { border: none; vertical-align: middle; } p { margin: 0.4em 0em 0.5em 0em; line-height: 1.5em; } p img { margin: 0; } hr { height: 1px; color: #aaaaaa; background-color: #aaaaaa; border: 0; margin: 0.2em 0 0.2em 0; } h1, h2, h3, h4, h5, h6 { color: Black; background: none; font-weight: normal; margin: 0; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom: 1px solid #aaaaaa; } .editsection { font-weight: normal; } h1 { font-size: 188%; } h1 .editsection { font-size: 53.2%; } h2 { font-size: 150%; } h2 .editsection { font-size: 66.7%; } h3, h4, h5, h6 { border-bottom: none; font-weight: bold; } h3 { font-size: 132%; } h3 .editsection { font-size: 75.8%; } h4 { font-size: 116%; } h4 .editsection { font-size: 86.2%; } h5 { font-size: 100%; } h6 { font-size: 80%; } h6 .editsection { font-size: 125%; } ul { line-height: 1.5em; margin: 0.3em 0 0 1.5em; padding:0; } ol { line-height: 1.5em; margin: 0.3em 0 0 3.2em; padding:0; list-style-image: none; } li { margin-bottom: 0.1em; } dt { font-weight: bold; margin-bottom: 0.1em; } dl{ margin-top: 0.2em; margin-bottom: 0.5em; } dd { line-height: 1.5em; margin-left: 2em; margin-bottom: 0.1em; } fieldset { border: 1px solid #2f6fab; margin: 1em 0em 1em 0em; padding: 0em 1em 1em 1em; line-height: 1.5em; } legend { background: White; padding: 0.5em; font-size: 95%; } form { border: none; margin: 0; } textarea { border: 1px solid #2f6fab; color: Black; background-color: white; width: 100%; padding: 0.1em; overflow: auto; } /* hide this from ie/mac and konq2.2 */ @media All { head:first-child+body input { visibility: visible; border: 1px solid #2f6fab; color: Black; background-color: white; vertical-align: middle; padding: 0.2em; } } input.historysubmit { padding: 0 0.3em 0.3em 0.3em !important; font-size: 94%; cursor: pointer; height: 1.7em !important; margin-left: 1.6em; } input[type="radio"], input[type="checkbox"] { border:none; } select { border: 1px solid #2f6fab; color: Black; vertical-align: top; } abbr, acronym, .explain { border-bottom: 1px dotted Black; color: Black; background: none; cursor: help; } q { font-family: Times, "Times New Roman", serif; font-style: italic; } code { background-color: #f9f9f9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: Black; background-color: #f9f9f9; line-height: 1.1em; } /* ** the main content area */ span.subpages { display: block; } /* Some space under the headers in the content area */ #bodyContent h1, #bodyContent h2 { margin-bottom:0.6em; } #bodyContent h3, #bodyContent h4, #bodyContent h5 { margin-bottom: 0.3em; } #firstHeading { margin-bottom:0.1em; } /* user notification thing */ .usermessage { background-color: #ffce7b; border: 1px solid #ffa500; color: Black; font-weight: bold; margin: 0.1em 0 0 0; padding: 2px 5px; vertical-align: middle; } #siteNotice { text-align: center; font-size: 95%; padding: 0 0.9em 0 0.9em; } #siteNotice p { margin: 0; padding: 0; } .error { color: red; font-size: larger; } .catlinks { border:1px solid #aaaaaa; background-color:#f9f9f9; padding: 2px 5px; margin: 0.1em 0 0 0; clear: both; } .catlinks { margin: 0; padding: 0; } /* currently unused, intended to be used by a metadata box in the bottom-right corner of the content area */ .documentDescription { /* The summary text describing the document */ font-weight: bold; display: block; margin: 1em 0em; line-height: 1.5em; } .documentByLine { text-align: right; font-size: 90%; clear: both; font-weight: normal; color: #76797c; } /* emulate center */ .center { width: 100%; text-align: center; } *.center * { margin-left: auto; margin-right: auto; } /* small for tables and similar */ .small, .small * { font-size: 94%; } table.small { font-size: 100% } /* ** content styles */ #toc { /*border:1px solid #2f6fab;*/ border:1px solid #aaaaaa; background-color:#f9f9f9; padding:5px; font-size: 95%; } #toc ul { margin-left: 2em; } #toc .toctoggle { font-size: 94%; } #toc .editsection { margin-top: 0.7em; font-size: 94%; } /* images */ div.floatright, table.floatright { clear: right; float: right; margin: 0; position: relative; border: 0.5em solid White; border-width: 0.5em 0 0.8em 1.4em; } div.floatright p { font-style: italic; } div.floatleft, table.floatleft { float: left; clear: left; margin: 0.3em 0.5em 0.5em 0; position: relative; border: 0.5em solid White; border-width: 0.5em 1.4em 0.8em 0; } div.floatleft p { font-style: italic; } /* thumbnails */ div.thumb { margin-bottom: 0.5em; border-style: solid; border-color: White; width: auto; } div.thumb div { border:1px solid #cccccc; padding: 3px !important; background-color:#f9f9f9; font-size: 94%; text-align: center; overflow: hidden; } div.thumb div a img { border:1px solid #cccccc; } div.thumb div div.thumbcaption { border: none; text-align: left; line-height: 1.4em; padding: 0.3em 0 0.1em 0; } div.magnify { float: right; border: none !important; background: none !important; } div.magnify a, div.magnify img { display: block; border: none !important; background: none !important; } div.tright { clear: right; float: right; border-width: 0.5em 0 0.8em 1.4em; } div.tleft { float: left; clear: left; margin-right:0.5em; border-width: 0.5em 1.4em 0.8em 0; } img.thumbborder { border: 1px solid #dddddd; } .hiddenStructure { display: none; } /* ** classes for special content elements like town boxes ** intended to be referenced directly from the wiki src */ /* ** User styles */ /* table standards */ table.rimage { float:right; position:relative; margin-left:1em; margin-bottom:1em; text-align:center; } .toccolours { border:1px solid #aaaaaa; background-color:#f9f9f9; padding:5px; font-size: 95%; } /* ** edit views etc */ .special li { line-height: 1.4em; margin: 0; padding: 0; } a.external { color: #3366bb; } div#footer { text-align: center; } ul#f-list li { list-style: none; text-align: center; } div.portlet { margin: 0.5em 0; } .redirectText { font-size:150%; margin:5px; } ul.special li.not-patrolled, ol.special li.not-patrolled { background-color: #ffa; } div.patrollink { font-size: 75%; text-align: right; } span.updatedmarker { color:black; background-color:#00FF00; } div.gallerybox { width: 150px; } #xjump-to-nav { display: none; } .templatesUsed { margin-top: 1.5em; } .printfooter { display: none; } #footer { background-color: white; border-top: 1px solid #fabd23; border-bottom: 1px solid #fabd23; margin: .6em 0 1em 0; padding: .4em 0 1.2em 0; text-align: center; font-size: 90%; } #f-poweredbyico, #f-copyrightico { display: inline; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: image/png Content-Location: http://en.wikibooks.org/w/extensions/FlaggedRevs/img/1.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAA AAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kB AQ8vFpGtY5MAAAKVSURBVDjLhZO7bx1FFMa/eezO+O6d6x35cf2ABkcRklFK0rgI SO5ooAIaJJoALTSWQkXDH0CBlD5CipRUadLg0vkDbMkyooHGupbsvbvr3ZmdmUOB bSAy8JNOc6Tz+j4dtre3B845OOeIMUJKeV9K+dFoNHqglHpLSomU0q/OuX0Az1JK r4wx4JyDiCBxBRHpPM+/s9Z+Ya0dG2OgtYYQAkS07Jx7t2mar6qq+jGl9C3nvAfw ZwMiKrTWP02n0w+m0ynKssTCwgKyLANjDESEGCOcc+P5fP7NbDZ7u+u6jxljrdjZ 2YFS6vv19fXPNjc3sbq6CmMMlFKQUkIIASklsixDnufQWiPP87t93+thGF5KIcR9 a+3DtbU1LC8voygKcM7BGMPrCCGgtYa1FiGEh6enp0+l1vpTa21RliU45+j7/mbt 2xBCQCmFxcXFommaT2RRFO+XZQnnHC4uLqC1vnU6AKSU4L3H0tISxuMxJpPJe1Ip 9cZoNELbttje3sbW1hb+i5OTExwdHWEymSDP8zcl5xxCiGu7AADDMCCEgJTStcWI MYJzjrquEUK4OUcS0e8xxnI8HuPw8BDHx8cIIYCI/qEDEYExhsvLS1hrr3O/Se/9 z13XvbOxsQFjDJqmuVXAa2FXVlZgjEGMEd77femce9I0zefOuWIymaAoCvwfKSW0 bdt6759wIjo4Pz9/XFUV+r5HjBEppX+Nq8mo6/pxjPGAM8bgvX80m81eVFUF59yN eK9DRAghoK7rF977R4wxiN3dXWRZNjDGnjvnFgDcE0Lkfy9KKSGEgL7v2/l8/sMw DF8S0WVK6a9vZIx1Xdd9fXZ29rRpmg+NMQ/yPL9zZe8v3vt9InoeQjhQSiHGCAD4 A/tLZV+RjaiNAAAAAElFTkSuQmCC ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: image/png Content-Location: http://en.wikibooks.org/w/extensions/FlaggedRevs/img/2.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAA AAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kB AQ8wAKgj2FwAAAM8SURBVDjLTZNNbFRVAIW/e+/7m/fmTenM67SlLSVQSoFEYEOj MRFdqEQ31gXqxsSEoK5MdImJiRuXLlyQ4E5FA4lsdKMxsjHChkTSqDFUpZSWdtrp MJ03b97PfdcFpuHbf2dxTo749KMXUUogpaQoNLal5m1bLYRV57TnWgeUlBhj/h6k xXUD35rS3KyFLkpJytJg8T/GGM91rI+juv92sxFUh2ouFc9GKYkxJhqkxanuTvpu u5NcLEvzoVIMgEcBZUkQ+PY3k+O1lyfHQ6Jhn7Dq4NgKIcAYyPKSJMmr7YfJB2sb vbm4n78mBLF64ZmDeK71yb69Q28enK4z1qxQ6IL1rZTV9ZRWO6UXZ9i2ZqjmUg08 HFvN9pPcy3L9g2VZcn6kEZzfNzFExTMsr+V4jadoHj6JXxsHIO6u0V69xf2lX9k/ rhgdCSh0eX5ltXvVqnjOG6Mj1UBJTXuwj6njZxmOpnkcrzJDY3SG9uY8y39eYTxc I6r7QXdn8LoMA+e5imvoDBocPHluV+73Wize/IrFm18S72wAUI+mOXDiHHdbIbrI 2TPkPSt935qM+5rm/ufxq8M8KlXz2y+f01n5DtX7iTu3vqAsNVqXKLdGJXqS1Y0Y z7WnpKUklpIgdudE6xIhBKONgKjuI5SgKEqSpE9vp0eWZcRJjhQgC21WGnscNu/+ yMPOBrkW5IVm5vhZ8uBpNvNTTMy+SpbnJGnB9uY9HvzzM8M1BwP31MKZI0eaUW0+ CjNWlv/CqCbKCbGdkFp0jNrIMZAV+v2ErY0l/r39NY2gzf6pEXr97IqVDorL293B W81GI5j22iz9cREqR/GHD+P6EaY09HvrdFu/E7dvM1YvOXRgHGOIB2lx2TJwY3Or fykarrw3MVbjxJyhtbXIg7VbdAYlxhigJPQFs3MhjXqIwbDeii9pXd6whBAM0uLC 6nrvkONYLzUbPnvH6uwdM2htMMYghEBKgRCCLNd0usn3aVZcEAjUwpmjOLbMDeLa IMkrBp6QEgcESspdsdAlcZLH253ksyzX7xhDX+vH3igFSZzk76+3ele7veyVPTX3 tOvaM0qAgTtpWlwvDdeKQt/wXAuNAeA/aGJ9kbIpo5QAAAAASUVORK5CYII= ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: image/png Content-Location: http://en.wikibooks.org/w/extensions/FlaggedRevs/img/lock-open.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABcAAAASCAYAAACw50UTAAADbklEQVR4nHWTT2zc RBSHf+/NjO11omSzBIJKFURCEBBQBAmCwiE5IVCOvdADqInKDc6IY4U4ISEhhMSR AwcuUKkgeqEUFShSQi6IC6gKoFbN3yZeZ3ezHo/ncdh02TXJWJaf7ZnPv/lmTDi+ MQB/XL24uBjPL8y/oiv6bCttLbRb7bg2VvtTvHy5dXv7q6vff3dzbW3NA4A6AS5H UOmpaW5uLr7w5oW3Kg/H79V1Gvqmu2zYXMvithl8ZPjc5OmJF8Ti15XVlV0ApE+A o5Qcs7OzvLy8/JoO9dtfX//m84TSTzZ+vLWZ7WSu+mR18NQT4wtzDz7z/lNPT38w MTHx+vr6+m4Zzj3gezo8AExOTp4aGRk5t7aytn7l028vHhwcNLoB/kCCS6uXt1/a qC2dX7o4MzPzsnPuCz4G6nvuu21qamq00Wg8Xk/qV47A/xu3cWfj+tbWlp+enn6O iHQZwuhfwO6zIAiGRKSmtd4sve9qdM7tMbMbHx+vGmOCMqw3ee8VTAwCQaQvcW8g OFeAmRGGISCABuDP/Pxq9Lx6djCiEA1uQSzgC8AXHkoxWDHav9uq5Rzx6YHa2V+W hh7lCeusBwQwRiOsGH/jo6taIIkwWtXZGggAXvxp8Y2F6MzHhfj4H3u7kdkcRS5w roDRDGUUTKAwpkfjMXO/vta68eF2sfvub/M/uNIs0TtjDQCBBNED0ai+k2/pv9Jb 1aSVIsty5DaHMRomDDAQhYiHK3gsnPRBy0TOOfTAyrXvulNgOCmwZxO0fdbTlyAE EAEFPJKiDis5FCmQ9DkvfwRAxzkDhEbRxI67Cy+dPnJ03PtHRTwSlyJxKUQE0lnZ 8lbu1QINAIU4JEWKg6LRIRFARKUcjLa3SFwdueQg4j6/5dRduJBgv6ijLW0cxQYA KGJo1jCsEbAGEbDv63BwUKRwDLhPkQbgFRRy72DIIFYxAl0gEg9PgsAYRCZAoDRC DuDFw3oL6Yw/EfyfcwKYCPfpGjJY5HDIyCEnB6M1AtU5Q2XAxAg4BPWLOFYNV0dG WPY9EwBtGapJoFTAiYdKBJR4UCqgpoAzAnuCLpS++85NHQRheW/3zUJHYRinlzb+ 3nwo++xw/3DQNrMoP8yDInfaF8LEBG200xVjw4GgXRmObcM2VnmHh6Io3LM269vb vfW/cV2WgQf2DxcAAAAASUVORK5CYII= ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=flaggedrevs.css Content-Type: text/css; charset=UTF-8; name=flaggedrevs.css Content-Location: http://en.wikibooks.org/w/extensions/FlaggedRevs/flaggedrevs.css?60 Content-Transfer-Encoding: 8bit /* Every time you change this CSS please bump $wgFlaggedRevStyleVersion in FlaggedRevs.php */ /* Standard User Interface */ .flaggedrevs_basic, .flaggedrevs_quality, .flaggedrevs_pristine, .flaggedrevs_notice, .flaggedrevs_editnotice, .flaggedrevs_diffnotice, .flaggedrevs_warning, .flaggedrevs_preview { border: 1px solid #aaa; padding: 5px; font-weight: normal; line-height: 1.5em; margin: .5em 1em 0em 0em; text-align: center; clear: both; } .flaggedrevs_basic { background-color: #f0f8ff; } .flaggedrevs_quality { background-color: #f0fff0; } .flaggedrevs_pristine { background-color: #fffff0; } .flaggedrevs_notice { background-color: #f9f9f9; } .flaggedrevs_preview { background-color: #f9f9f9; color: #8b0000; } .flaggedrevs_warning { font-size: 85%; background-color: #fffff0; margin: 0em 1em 0em 0em; } .flaggedrevs_editnotice { font-size: 85%; background-color: #f9f9f9; } .flaggedrevs_diffnotice { font-size: 85%; background-color: #f9f9f9; } .flaggedrevs_notes { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; font-size: 85%; margin-left: 50px; margin-right: 50px; text-align: center; } .fr-text-value { width: 100px; } .fr-checkbox { padding: 0px; width: 16px; height: 16px; position: relative; float: left; top: 0px; right: 0px; background-repeat: no-repeat; background-position: 0px 0px; background-image: url(../FlaggedRevs/img/boxC.png); } .fr-marker-20, .fr-marker-40, .fr-marker-60, .fr-marker-80, .fr-marker-100 { background-position: bottom left; background-repeat: no-repeat; padding-bottom: 3px; } .fr-marker-20 { background-image: url(../FlaggedRevs/img/bar_20.png); } .fr-marker-40 { background-image: url(../FlaggedRevs/img/bar_40.png); } .fr-marker-60 { background-image: url(../FlaggedRevs/img/bar_60.png); } .fr-marker-80 { background-image: url(../FlaggedRevs/img/bar_80.png); } .fr-marker-100 { background-image: url(../FlaggedRevs/img/bar_100.png); } /* Short User Interface */ .flaggedrevs_short { border: 0px; background-color: #f9f9f9; padding: 1px; font-size: 95%; font-weight: normal; margin: 0em 0em 0em 1em; float: right; text-align: left; max-width: 450px; line-height: 16px; } .rtl .flaggedrevs_short { float: left; margin: 0 1em 0 0; } .fr-text { height: 1em; line-height: 1em; margin: 0px 7px 0px 0px; padding: 0px; font-weight: bold; width: 80px; } .fr-value20, .fr-value40, .fr-value60, .fr-value80, .fr-value100 { height: 1em; line-height: 1em; width: 95px; float: left; background-repeat: no-repeat; background-position: 50% 50%; text-align: center; } .fr-value20 { background-image: url(../FlaggedRevs/img/fr-marker-20.png); } .fr-value40 { background-image: url(../FlaggedRevs/img/fr-marker-40.png); } .fr-value60 { background-image: url(../FlaggedRevs/img/fr-marker-60.png); } .fr-value80 { background-image: url(../FlaggedRevs/img/fr-marker-80.png); } .fr-value100 { background-image: url(../FlaggedRevs/img/fr-marker-100.png); } .flaggedrevs-box0, .flaggedrevs-box1, .flaggedrevs-box2, .flaggedrevs-box3 { border: 1px solid #aaa; text-align: center; font-size: 85%; clear: both; } .flaggedrevs-box0 { background-color: #f9f9f9; } .flaggedrevs-box1 { background-color: #f0f8ff; } .flaggedrevs-box2 { background-color: #f0fff0; } .flaggedrevs-box3 { background-color: #fffff0; } /* Both User Interfaces */ .flaggedrevs-color-0 { background-color: #f9f9f9; } .flaggedrevs-color-1 { background-color: #f0f8ff; } .flaggedrevs-color-2 { background-color: #f0fff0; } .flaggedrevs-color-3 { background-color: #fffff0; } .flaggedrevs-unreviewed { background-color: #fffff0; } .flaggedrevs-unreviewed2 { background-color: #faebd7; } .flaggedrevs_toggle { color: blue; white-space: nowrap; cursor:pointer; } .fr-icon-current, .fr-icon-stable, .fr-icon-quality, .fr-icon-locked, .fr-icon-unlocked { padding: 0px; margin: 0em .2em 0em 0em; width: 16px; height: 16px; float: left; background-repeat: no-repeat; background-position: center center; } .fr-icon-current { background-image: url(../FlaggedRevs/img/1.png); } .fr-icon-stable { background-image: url(../FlaggedRevs/img/2.png); } .fr-icon-quality { background-image: url(../FlaggedRevs/img/3.png); } .fr-icon-locked { background-image: url(../FlaggedRevs/img/lock-closed.png); } .fr-icon-unlocked { width: 23px; background-image: url(../FlaggedRevs/img/lock-open.png); } .fr-diff-ratings { font-size: 90%; line-height: 1em; } .fr-diff-to-stable { line-height: 1em; } .fr-hist-stable-user, .fr-hist-quality-user, .fr-hist-autoreviewed { font-weight: bold; } /* Site notices */ .fr-backlognotice { padding: 3px; margin: 5px; border: 1px solid #990000; background-color: #f5ecec; } .fr-watchlist-old-notice { padding: 3px; margin: 5px; border: 1px solid #990000; background-color: #FEECD7; } /* Special pages */ .fr-pending-long { background-color: #f5ecec; } .fr-pending-long2 { background-color: #f5dddd; } .fr-pending-long3 { background-color: #e2caca; } .fr-unreviewed-unwatched { background-color: #faebd7; } .fr-under-review { background-color: yellow; } /* Review form */ .flaggedrevs_reviewform { background-color: #f9f9f9; font-size: 90%; clear: both; } .fr-rating-controls, .fr-rating-controls-disabled { vertical-align: middle; line-height: 1em; } .fr-rating-controls-disabled { color: GrayText; } .fr-rating-options { margin-right: 1.5em; } .fr-rating-option-0 { background-color: #f5ecec; } .fr-rating-option-1 { background-color: #f0f8ff; } .fr-rating-option-2 { background-color: #f0fff0; } .fr-rating-option-3 { background-color: #fef0db; } .fr-rating-option-4 { background-color: #fffff0; } .fr-diff-patrollink { text-align: center; } .fr-notes-box { width: 95%; margin: 0em 1em 0em .5em; } .fr-comment-box { margin-top: .25em; } .fr-rating-dave { background-color: #E0ECF8; } .fr-rating-rave { background-color: #E0F8EC; } .fr-hiddenform { display: none; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/WikiTable.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /*******************************/ /* wikitable/prettytable class */ /*******************************/ /* wikitable/prettytable class for skinning normal tables, but don't skin tables within tables by accident */ table.wikitable, table.prettytable { margin:1em 0em; background:#f9f9f9; border:1px #aaaaaa solid; border-collapse:collapse; } table.wikitable>*>tr>th, table.wikitable>*>tr>td, table.wikitable>tr>th, table.wikitable>tr>td, table.prettytable>*>tr>th, table.prettytable>*>tr>td, table.prettytable>tr>th, table.prettytable>tr>td { border: 1px #aaaaaa solid; padding: 0.2em; } table.wikitable>*>tr>th, table.wikitable>tr>th, table.prettytable>*>tr>th, table.prettytable>tr>th { background: #ccccff; text-align: center; } table.wikitable caption, table.prettytable caption { margin-left:inherit; margin-right:inherit; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: http://en.wikibooks.org/w/index.php?title=MediaWiki:Common.css/WikiTable.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /*******************************/ /* wikitable/prettytable class */ /*******************************/ /* wikitable/prettytable class for skinning normal tables, but don't skin tables within tables by accident */ table.wikitable, table.prettytable { margin:1em 0em; background:#f9f9f9; border:1px #aaaaaa solid; border-collapse:collapse; } table.wikitable>*>tr>th, table.wikitable>*>tr>td, table.wikitable>tr>th, table.wikitable>tr>td, table.prettytable>*>tr>th, table.prettytable>*>tr>td, table.prettytable>tr>th, table.prettytable>tr>td { border: 1px #aaaaaa solid; padding: 0.2em; } table.wikitable>*>tr>th, table.wikitable>tr>th, table.prettytable>*>tr>th, table.prettytable>tr>th { background: #ccccff; text-align: center; } table.wikitable caption, table.prettytable caption { margin-left:inherit; margin-right:inherit; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/CommonsTicker.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /************************/ /* CommonsTicker styles */ /************************/ /* links */ .tickerDiffLink { } /* diff links in ticker */ .tickerMiscLink { } /* misc links in ticker */ /* remove list bullets */ .tickerList ul, .tickerList ul li { list-style: none; text-indent:-2em; margin-left:2em; text-align:left; } .tickerList ul ul, .tickerList ul ul li { list-style: none; text-indent:0; margin-left:1.5em; text-align:left; } /* per-type styles */ .tickerEntry_deleted { } /* entry for image deletion */ .tickerEntry_restored { } /* entry for restored image */ .tickerEntry_replaced { } /* entry for image replacement */ .tickerEntry_tagged { } /* entry for adding/removing problem tags */ .tickerEntry_redir { } /* entry for critical redirection (fot tag redirects) */ .tickerEntry_recat { } /* entry for critical re-categorization (for tag categories) */ .tickerEntry_notify { } /* entry for global notifications */ .tickerEntry_changed { } /* entry for generic change */ /* per-status styles */ .tickerStatus_done { text-decoration:line-through; } /* strike through when entry has been handeled */ /* per-action styles */ .tickerAction_deleted:before { content:" GONE "; color: #FF0000; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_restored:before { content:" BACK "; color: #00BB00; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_deletedRev:before { content:" -OLD "; color: #DDAAAA; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_replaced:before { content:" REPL "; color: #CC88FF; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_replacedOwn:before { content:" UPDT "; color: #EEAAFF; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_addedBad:before { content:" +VfD "; color: #FF8800; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_removedBad:before { content:" -VfD "; color: #00BB00; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_addedGood:before { content:" +OK "; color: #00BB00; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_removedGood:before { content:" -OK "; color: #FF8800; font-family:monospace; font-weight:bold; font-size:100%; } /* ticker usage list */ .tickerUsage { font-size:80%; } /* entry applies to a template used by multiple images */ .tickerTemplateEntry { font-weight: bold; } /* entry applies to sub-entries, i.e. images that use a specific template */ .tickerSubEntry { } /* minor entry styles */ .tickerMinorEntry { color:#666; } /* minor entry */ .tickerMinorEntry a, .tickerMinorEntry a:link, .tickerMinorEntry a:visited { color:#669; } #bodyContent .tickerMinorEntry a.extiw, #bodyContent .tickerMinorEntry a.extiw:link, #bodyContent .tickerMinorEntry a.extiw:visited { color:#669; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: http://en.wikibooks.org/w/index.php?title=MediaWiki:Common.css/CommonsTicker.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /************************/ /* CommonsTicker styles */ /************************/ /* links */ .tickerDiffLink { } /* diff links in ticker */ .tickerMiscLink { } /* misc links in ticker */ /* remove list bullets */ .tickerList ul, .tickerList ul li { list-style: none; text-indent:-2em; margin-left:2em; text-align:left; } .tickerList ul ul, .tickerList ul ul li { list-style: none; text-indent:0; margin-left:1.5em; text-align:left; } /* per-type styles */ .tickerEntry_deleted { } /* entry for image deletion */ .tickerEntry_restored { } /* entry for restored image */ .tickerEntry_replaced { } /* entry for image replacement */ .tickerEntry_tagged { } /* entry for adding/removing problem tags */ .tickerEntry_redir { } /* entry for critical redirection (fot tag redirects) */ .tickerEntry_recat { } /* entry for critical re-categorization (for tag categories) */ .tickerEntry_notify { } /* entry for global notifications */ .tickerEntry_changed { } /* entry for generic change */ /* per-status styles */ .tickerStatus_done { text-decoration:line-through; } /* strike through when entry has been handeled */ /* per-action styles */ .tickerAction_deleted:before { content:" GONE "; color: #FF0000; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_restored:before { content:" BACK "; color: #00BB00; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_deletedRev:before { content:" -OLD "; color: #DDAAAA; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_replaced:before { content:" REPL "; color: #CC88FF; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_replacedOwn:before { content:" UPDT "; color: #EEAAFF; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_addedBad:before { content:" +VfD "; color: #FF8800; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_removedBad:before { content:" -VfD "; color: #00BB00; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_addedGood:before { content:" +OK "; color: #00BB00; font-family:monospace; font-weight:bold; font-size:100%; } .tickerAction_removedGood:before { content:" -OK "; color: #FF8800; font-family:monospace; font-weight:bold; font-size:100%; } /* ticker usage list */ .tickerUsage { font-size:80%; } /* entry applies to a template used by multiple images */ .tickerTemplateEntry { font-weight: bold; } /* entry applies to sub-entries, i.e. images that use a specific template */ .tickerSubEntry { } /* minor entry styles */ .tickerMinorEntry { color:#666; } /* minor entry */ .tickerMinorEntry a, .tickerMinorEntry a:link, .tickerMinorEntry a:visited { color:#669; } #bodyContent .tickerMinorEntry a.extiw, #bodyContent .tickerMinorEntry a.extiw:link, #bodyContent .tickerMinorEntry a.extiw:visited { color:#669; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/Infobox.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /* Infobox template style */ .infobox { border:1px solid #aaa; background-color:#f9f9f9; color:black; margin:0.5em 0em 0.5em 1em; padding:0.2em; float:right; clear:right; } .infobox td, .infobox th { vertical-align:top; } .infobox caption { font-size:larger; margin-left:inherit; margin-right:inherit; } .infobox.bordered { border-collapse:collapse; } .infobox.bordered td, .infobox.bordered th { border:1px solid #aaaaaa; } .infobox.bordered .borderless td, .infobox.bordered .borderless th { border:0px; } .infobox.sisterproject { width:20em; font-size:90%; } .infobox.standard-talk { border:1px solid #c0c090; background-color:#f8eaba; } .infobox.standard-talk.bordered td, .infobox.standard-talk.bordered th { border:1px solid #c0c090; } /* styles for bordered infobox with merged rows */ .infobox.bordered .mergedtoprow td, .infobox.bordered .mergedtoprow th { border:0px; border-top:1px solid #aaaaaa; border-right:1px solid #aaaaaa; } .infobox.bordered .mergedrow td, .infobox.bordered .mergedrow th { border:0px; border-right:1px solid #aaaaaa; } /* Styles for geography infoboxes, eg countries, country subdivisions, cities, etc. */ .infobox.geography { text-align:left; border-collapse:collapse; line-height:1.2em; font-size:90%; } .infobox.geography td, .infobox.geography th { border-top:1px solid #aaaaaa; padding:0.4em 0.6em 0.4em 0.6em; } .infobox.geography .mergedtoprow td, .infobox.geography .mergedtoprow th { border-top:1px solid #aaaaaa; padding:0.4em 0.6em 0.2em 0.6em; } .infobox.geography .mergedrow td, .infobox.geography .mergedrow th { border:0px; padding:0em 0.6em 0.2em 0.6em; } .infobox.geography .mergedbottomrow td, .infobox.geography .mergedbottomrow th { border-top:0px; border-bottom:1px solid #aaaaaa; padding:0em 0.6em 0.4em 0.6em; } .infobox.geography .maptable td, .infobox.geography .maptable th { border:0px; padding:0px; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: http://en.wikibooks.org/w/index.php?title=MediaWiki:Common.css/Infobox.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /* Infobox template style */ .infobox { border:1px solid #aaa; background-color:#f9f9f9; color:black; margin:0.5em 0em 0.5em 1em; padding:0.2em; float:right; clear:right; } .infobox td, .infobox th { vertical-align:top; } .infobox caption { font-size:larger; margin-left:inherit; margin-right:inherit; } .infobox.bordered { border-collapse:collapse; } .infobox.bordered td, .infobox.bordered th { border:1px solid #aaaaaa; } .infobox.bordered .borderless td, .infobox.bordered .borderless th { border:0px; } .infobox.sisterproject { width:20em; font-size:90%; } .infobox.standard-talk { border:1px solid #c0c090; background-color:#f8eaba; } .infobox.standard-talk.bordered td, .infobox.standard-talk.bordered th { border:1px solid #c0c090; } /* styles for bordered infobox with merged rows */ .infobox.bordered .mergedtoprow td, .infobox.bordered .mergedtoprow th { border:0px; border-top:1px solid #aaaaaa; border-right:1px solid #aaaaaa; } .infobox.bordered .mergedrow td, .infobox.bordered .mergedrow th { border:0px; border-right:1px solid #aaaaaa; } /* Styles for geography infoboxes, eg countries, country subdivisions, cities, etc. */ .infobox.geography { text-align:left; border-collapse:collapse; line-height:1.2em; font-size:90%; } .infobox.geography td, .infobox.geography th { border-top:1px solid #aaaaaa; padding:0.4em 0.6em 0.4em 0.6em; } .infobox.geography .mergedtoprow td, .infobox.geography .mergedtoprow th { border-top:1px solid #aaaaaa; padding:0.4em 0.6em 0.2em 0.6em; } .infobox.geography .mergedrow td, .infobox.geography .mergedrow th { border:0px; padding:0em 0.6em 0.2em 0.6em; } .infobox.geography .mergedbottomrow td, .infobox.geography .mergedbottomrow th { border-top:0px; border-bottom:1px solid #aaaaaa; padding:0em 0.6em 0.4em 0.6em; } .infobox.geography .maptable td, .infobox.geography .maptable th { border:0px; padding:0px; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/Messagebox.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /* Default messagebox is gray */ .messagebox { width:90%; margin:0px auto; padding:0em; border:2px solid #aaaaaa; background:#fbfbfb; color:black; text-align:left; } .messagebox img { border:0em; padding:0em 0.5em; text-align:center; } /* default for all content namespaces */ .ns-subject .messagebox + .messagebox { border-top-width:0em; margin-top:-1px; } .ns-subject .messagebox { border-left-color:#1e90ff; border-left-width:10px; } .ns-subject .messagebox.notice { border-left-color:#1e90ff; } .ns-subject .messagebox.warning { border-left-color:#b22222; } .ns-subject .messagebox.serious { border-left-color:#b22222; } .ns-subject .messagebox.content { border-left-color:#f28500; } .ns-subject .messagebox.style { border-left-color:#f4c430; } .ns-subject .messagebox.merge { border-left-color:#9932cc; } .ns-subject .messagebox.growth { border-left-color:#228b22; } .ns-subject .messagebox.idea { border-left-color:yellow; } .ns-subject .messagebox.query { border-left-color:#ffb734; } .ns-subject .messagebox.move { border-left-color:#9932cc; } /* image namespace */ .ns-6 .messagebox + .messagebox { border-top-width:2px; margin-top:0.5em; } .ns-6 .messagebox { border-color:#1e90ff; border-bottom-width:5px; border-left-width:2px;} .ns-6 .messagebox.notice { border-color:#1e90ff; } .ns-6 .messagebox.warning { border-color:#b22222; } .ns-6 .messagebox.serious { border-color:#b22222; } .ns-6 .messagebox.content { border-color:#f28500; } .ns-6 .messagebox.query { border-color:#ffb734; } .ns-6 .messagebox.free { border-color:#79CC55; } .ns-6 .messagebox.nonfree { border-color:#EF9132; } .ns-6 .messagebox.pd { border-color:#7E80A3; } .ns-6 .messagebox.move { border-color:#9932cc; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: http://en.wikibooks.org/w/index.php?title=MediaWiki:Common.css/Messagebox.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /* Default messagebox is gray */ .messagebox { width:90%; margin:0px auto; padding:0em; border:2px solid #aaaaaa; background:#fbfbfb; color:black; text-align:left; } .messagebox img { border:0em; padding:0em 0.5em; text-align:center; } /* default for all content namespaces */ .ns-subject .messagebox + .messagebox { border-top-width:0em; margin-top:-1px; } .ns-subject .messagebox { border-left-color:#1e90ff; border-left-width:10px; } .ns-subject .messagebox.notice { border-left-color:#1e90ff; } .ns-subject .messagebox.warning { border-left-color:#b22222; } .ns-subject .messagebox.serious { border-left-color:#b22222; } .ns-subject .messagebox.content { border-left-color:#f28500; } .ns-subject .messagebox.style { border-left-color:#f4c430; } .ns-subject .messagebox.merge { border-left-color:#9932cc; } .ns-subject .messagebox.growth { border-left-color:#228b22; } .ns-subject .messagebox.idea { border-left-color:yellow; } .ns-subject .messagebox.query { border-left-color:#ffb734; } .ns-subject .messagebox.move { border-left-color:#9932cc; } /* image namespace */ .ns-6 .messagebox + .messagebox { border-top-width:2px; margin-top:0.5em; } .ns-6 .messagebox { border-color:#1e90ff; border-bottom-width:5px; border-left-width:2px;} .ns-6 .messagebox.notice { border-color:#1e90ff; } .ns-6 .messagebox.warning { border-color:#b22222; } .ns-6 .messagebox.serious { border-color:#b22222; } .ns-6 .messagebox.content { border-color:#f28500; } .ns-6 .messagebox.query { border-color:#ffb734; } .ns-6 .messagebox.free { border-color:#79CC55; } .ns-6 .messagebox.nonfree { border-color:#EF9132; } .ns-6 .messagebox.pd { border-color:#7E80A3; } .ns-6 .messagebox.move { border-color:#9932cc; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/Hoverbox.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /* Hover Box for switching the visibility of the selected item */ .hoverbox { position:relative; padding:0em; } .hoverbox .hoveritem { visibility:collapse; position:absolute; left:0px; top:0px; } .hoverbox .hoveritem.selected { visibility:visible; position:relative; } .hoverbox:hover .hoveritem { visibility:visible; position:relative; } .hoverbox:hover .hoveritem.selected { visibility:collapse; position:absolute;} ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: http://en.wikibooks.org/w/index.php?title=MediaWiki:Common.css/Hoverbox.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /* Hover Box for switching the visibility of the selected item */ .hoverbox { position:relative; padding:0em; } .hoverbox .hoveritem { visibility:collapse; position:absolute; left:0px; top:0px; } .hoverbox .hoveritem.selected { visibility:visible; position:relative; } .hoverbox:hover .hoveritem { visibility:visible; position:relative; } .hoverbox:hover .hoveritem.selected { visibility:collapse; position:absolute;} ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/Autocount.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /* smart counters - allow up to #.#.# levels of counting. */ body { counter-reset: autocount-1 autocount-2 autocount-3; } .autocount:before, .autocount-list ol li:before { counter-increment:autocount-1; content: counter(autocount-1) " "; color:green; } .autocount-reset:before { counter-reset: autocount-1; } .autocount .autocount:before, .autocount-list li ol li:before { counter-increment: autocount-2; content: counter(autocount-1) "." counter(autocount-2) " "; color:red; } .autocount .autocount .autocount:before, .autocount-list li li ol li:before { counter-increment: autocount-3; content: counter(autocount-1) "." counter(autocount-2) "." counter(autocount-3) " "; color:green; } .autocount-list ol { margin-left:1.5em; } .autocount-list ol li { list-style:none; } .autocount-list ol li:first-child { counter-reset: autocount-1; } .autocount-list li ol li:first-child { counter-reset: autocount-2; } .autocount-list li li ol li:first-child { counter-reset: autocount-3; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: http://en.wikibooks.org/w/index.php?title=MediaWiki:Common.css/Autocount.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /* smart counters - allow up to #.#.# levels of counting. */ body { counter-reset: autocount-1 autocount-2 autocount-3; } .autocount:before, .autocount-list ol li:before { counter-increment:autocount-1; content: counter(autocount-1) " "; color:green; } .autocount-reset:before { counter-reset: autocount-1; } .autocount .autocount:before, .autocount-list li ol li:before { counter-increment: autocount-2; content: counter(autocount-1) "." counter(autocount-2) " "; color:red; } .autocount .autocount .autocount:before, .autocount-list li li ol li:before { counter-increment: autocount-3; content: counter(autocount-1) "." counter(autocount-2) "." counter(autocount-3) " "; color:green; } .autocount-list ol { margin-left:1.5em; } .autocount-list ol li { list-style:none; } .autocount-list ol li:first-child { counter-reset: autocount-1; } .autocount-list li ol li:first-child { counter-reset: autocount-2; } .autocount-list li li ol li:first-child { counter-reset: autocount-3; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/toc.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /* When
is used on the table of contents, the ToC will display without numbers */ .toclimit-count .tocnumber, .nonumtoc .tocnumber { display:none; } /* Allow limiting of which header levels are shown in a TOC;
, for instance, will limit to showing ==headings== and ===headings=== but no further (as long as there are no =headings= on the page, which there shouldn't be according to the MoS). */ .toclimit-2 .toclevel-2 {display:none;} .toclimit-3 .toclevel-3 {display:none;} .toclimit-4 .toclevel-4 {display:none;} .toclimit-5 .toclevel-5 {display:none;} .toclimit-6 .toclevel-6 {display:none;} ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: http://en.wikibooks.org/w/index.php?title=MediaWiki:Common.css/toc.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /* When
is used on the table of contents, the ToC will display without numbers */ .toclimit-count .tocnumber, .nonumtoc .tocnumber { display:none; } /* Allow limiting of which header levels are shown in a TOC;
, for instance, will limit to showing ==headings== and ===headings=== but no further (as long as there are no =headings= on the page, which there shouldn't be according to the MoS). */ .toclimit-2 .toclevel-2 {display:none;} .toclimit-3 .toclevel-3 {display:none;} .toclimit-4 .toclevel-4 {display:none;} .toclimit-5 .toclevel-5 {display:none;} .toclimit-6 .toclevel-6 {display:none;} ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/Multilingual.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /* Support for Template:IPA, Template:Unicode and Template:Polytonic. The second declarations reset the styles for all browsers except IE6, which chokes on the empty comment tags. */ .IPA { font-family: "Charis SIL", "Doulos SIL", Gentium, GentiumAlt, "DejaVu Sans", Code2000, "TITUS Cyberbit Basic", "Arial Unicode MS", "Lucida Sans Unicode", "Chrysanthi Unicode"; font-family /**/: inherit; } .Unicode { font-family: Code2000, Code2001, "Free Serif", "TITUS Cyberbit Basic", "Doulos SIL", "Chrysanthi Unicode", "Bitstream Cyberbit", "Bitstream CyberBase", Thryomanes, Gentium, GentiumAlt, "Lucida Grande", "Free Sans", "Arial Unicode MS", "Microsoft Sans Serif", "Lucida Sans Unicode"; font-family /**/: inherit; } .latinx { font-family: Code2000, Code2001, "TITUS Cyberbit Basic", "Microsoft Sans Serif"; font-family /**/: inherit; } .polytonic { font-family: "Athena Unicode", Gentium, "Palatino Linotype", "Arial Unicode MS", "Lucida Sans Unicode", "Lucida Grande", Code2000; font-family /**/: inherit; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: text/css; charset=UTF-8 Content-Location: http://en.wikibooks.org/w/index.php?title=MediaWiki:Common.css/Multilingual.css&action=raw&ctype=text/css Content-Transfer-Encoding: 8bit /* Support for Template:IPA, Template:Unicode and Template:Polytonic. The second declarations reset the styles for all browsers except IE6, which chokes on the empty comment tags. */ .IPA { font-family: "Charis SIL", "Doulos SIL", Gentium, GentiumAlt, "DejaVu Sans", Code2000, "TITUS Cyberbit Basic", "Arial Unicode MS", "Lucida Sans Unicode", "Chrysanthi Unicode"; font-family /**/: inherit; } .Unicode { font-family: Code2000, Code2001, "Free Serif", "TITUS Cyberbit Basic", "Doulos SIL", "Chrysanthi Unicode", "Bitstream Cyberbit", "Bitstream CyberBase", Thryomanes, Gentium, GentiumAlt, "Lucida Grande", "Free Sans", "Arial Unicode MS", "Microsoft Sans Serif", "Lucida Sans Unicode"; font-family /**/: inherit; } .latinx { font-family: Code2000, Code2001, "TITUS Cyberbit Basic", "Microsoft Sans Serif"; font-family /**/: inherit; } .polytonic { font-family: "Athena Unicode", Gentium, "Palatino Linotype", "Arial Unicode MS", "Lucida Sans Unicode", "Lucida Grande", Code2000; font-family /**/: inherit; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: image/png Content-Location: http://upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGElEQVQYV2N4DwX/ oYBhgARgDJjEAAkAAEC99wFuu0VFAAAAAElFTkSuQmCC ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=UTF-8; name=index.css Content-Location: http://en.wikibooks.org/w/index.php?title=MediaWiki:Common.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400 Content-Transfer-Encoding: 8bit /* Common CSS for all skins - copy to your user CSS to change */ @import url("https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/WikiTable.css&action=raw&ctype=text/css") screen; @import url("/w/index.php?title=MediaWiki:Common.css/WikiTable.css&action=raw&ctype=text/css") screen; @import url("https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/CommonsTicker.css&action=raw&ctype=text/css") screen; @import url("/w/index.php?title=MediaWiki:Common.css/CommonsTicker.css&action=raw&ctype=text/css") screen; @import url("https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/Infobox.css&action=raw&ctype=text/css") screen; @import url("/w/index.php?title=MediaWiki:Common.css/Infobox.css&action=raw&ctype=text/css") screen; @import url("https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/Messagebox.css&action=raw&ctype=text/css") screen; @import url("/w/index.php?title=MediaWiki:Common.css/Messagebox.css&action=raw&ctype=text/css") screen; @import url("https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/Hoverbox.css&action=raw&ctype=text/css"); @import url("/w/index.php?title=MediaWiki:Common.css/Hoverbox.css&action=raw&ctype=text/css") screen; @import url("https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/Autocount.css&action=raw&ctype=text/css"); @import url("/w/index.php?title=MediaWiki:Common.css/Autocount.css&action=raw&ctype=text/css") screen; @import url("https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/toc.css&action=raw&ctype=text/css"); @import url("/w/index.php?title=MediaWiki:Common.css/toc.css&action=raw&ctype=text/css") screen; @import url("https://secure.wikimedia.org/wikibooks/en/w/index.php?title=MediaWiki:Common.css/Multilingual.css&action=raw&ctype=text/css"); @import url("/w/index.php?title=MediaWiki:Common.css/Multilingual.css&action=raw&ctype=text/css") screen; /*****************/ /* miscellaneous */ /*****************/ /* hiddenStructure class from Monobook - allows selective hiding of markup in templates */ .hiddenStructure { display:none; speak:none; } /* audiolink class for links with loudspeaker icon next to them - like in {{Audio}} template */ .audiolink a { background: url("http://upload.wikimedia.org/wikipedia/commons/f/f7/Loudspeaker.png") center left no-repeat !important; padding-left: 16px !important; padding-right: 0 !important; } /* make redirects appear as italic on [[Special:Allpages]] */ .allpagesredirect { font-style: italic } .PrettyTextBox { background-color: #F9F9F9; color: #000000; border: 1px solid #AAAAAA; padding: .2em; } .archive-box { border: 1px solid #aaaaff; background-color: #f2f2f9; color: black; margin-bottom: 0.5em; margin-left: 1em; padding: 0.2em; float: right; clear: right; text-align: center; } /* Collapsible Containers */ div.NavFrame, .collapsible { margin:0px; border:1px solid #aaaaaa; border-collapse:collapse; text-align:center; font-size:100%; clear:both; } div.NavFrame + div.NavFrame, .collapsible + .collapsible { border-top:0px; margin-top:0px; } div.NavPic { margin:0px; padding:2px; float:left; } div.NavFrame div.NavHead, .collapsible .title, .collapsible th { cursor:pointer; padding:0.2em; font-weight:bold; font-size:95%; background:#ccccff; } div.NavFrame div.NavHead:hover, .collapsible .title:hover, .collapsible th:hover { background: #aaaaff; } div.NavFrame div.NavHead .action, .collapsible .action { float:right; font-weight:normal; font-size:10px; margin:auto 0.5em; white-space:nowrap; text-align:right; width:auto; } /* Fix for collision of collapsible class used in Vector's collapsible tabs extension */ body.skin-vector .vectorTabs .collapsible { border: none; clear: none; } /* Default skin for navigation boxes */ table.navbox { border:1px solid #aaaaaa; width:100%; margin:0.5em auto; clear:both; font-size:88%; text-align:center; padding:1px; } .navbox-title, .navbox-abovebelow, table.navbox th { text-align:center; padding-left:1em; padding-right:1em; } .navbox-group { white-space:nowrap; text-align:right; font-weight:bold; padding-left:1em; padding-right:1em; } .navbox, .navbox-subgroup { background:#fdfdfd; } .navbox-list { border-color:#fdfdfd; } .navbox-title, table.navbox th { background:#ccccff; } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background: #ddddff; } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background: #e6e6ff; } .navbox-even { background: #f7f7f7; } .navbox-odd { background: transparent; } /* Remove padding from external links displayed without icon */ .plainlinks .urlexpansion { display: none !important;} .plainlinks a { background:none !important; padding:0px !important;} .plainlinks a.external.text:after {display: none !important;} .plainlinks a.external.autonumber:after {display: none !important;} /** Bytecounter colours **/ strong.mw-plusminus-neg { color: #cc0000; } span.mw-plusminus-neg { color: #990000; } span.mw-plusminus-pos { color: #006600; } /* Navigation Tabs */ .navtabs .tabs li { list-style:none; } .navtabs .tabs a { text-decoration:none; text-transform:uppercase; outline-width:0px; font-size:x-small; font-weight:bold; color:black; } .navtabs .tabs .inactive { background:#bbb; padding:1ex; } .navtabs .tabs .selected { background:#999; padding:1.1ex; } .navtabs .tabs .inactive:hover { background:#f75; } .navtabs .contents { padding:1ex; border:3px solid #999; } /* Style for horizontal UL lists */ .horizontal ul, .DPLFlat ul { padding:0em; margin:0em; } .horizontal li, .DPLFlat li { display:inline; padding:0em 0.6em 0em 0.4em; border-right:1px solid #AAA; } .horizontal li:last-child, .DPLFlat li:last-child { border-right:0em; padding-right:0em; } @media screen, projection { .printonly { display: none !important; } } body.page-Main_Page h1.firstHeading, .page-Main_Page #siteSub { display: none; } .page-Main_Page h2 { font-size:16pt; margin:0; padding: 0; border-bottom:0; font-weight: bold; } /* Put a checker background at the image description page only visible if the image has transparent background */ #file img {background: url("http://upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png") repeat;} /* Fix the background color on the sitenotice */ table#mw-dismissable-notice { background-color: transparent; } /* Flagged revision fails to set the font color which can cause readability problems. Since the colors needed to be adjusted anyways, use different colors for each option for more usability. */ select { background:white; color:black; } select option.fr-rating-option-0 { color:red; } select option.fr-rating-option-1 { color:olive; } select option.fr-rating-option-2 { color:purple; } select option.fr-rating-option-3 { color:green; } select option.fr-rating-option-4 { color:navy; } .fr-rating-options option[selected="selected"] { font-weight:bold; } /* End of Common CSS skin */ ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=UTF-8; name=index.css Content-Location: http://en.wikibooks.org/w/index.php?title=MediaWiki:Print.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400 Content-Transfer-Encoding: 8bit /* CSS placed here will affect the print output, including [?&]printable=yes */ .editlink, .noprint, .metadata, .dablink, .toc, .infobox, #catlinks, .subpages, .navigation, #privacy, #about, #disclaimer { display: none !important; } div.expand-print { display: block !important; } span.expand-print { display: inline !important; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=UTF-8; name=index.css Content-Location: http://en.wikibooks.org/w/index.php?title=MediaWiki:Handheld.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400 Content-Transfer-Encoding: 8bit /* CSS placed here will affect handheld devices based on the skin configured in $wgHandheldStyle */ ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=UTF-8; name=index.css Content-Location: http://en.wikibooks.org/w/index.php?title=MediaWiki:Monobook.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400 Content-Transfer-Encoding: 8bit /* Edit this file to customize the monobook skin for the entire site. See also: [[MediaWiki:Common.css]] */ /* Donations link to be uncommented during fund raising drives #siteNotice { margin-top:5px; padding-left: 4px; font-style: italic; text-align: center; } */ /* BEGIN LIGHT BLUE SECTION Make content area light blue in all namespaces except content namespaces. This is done by setting the background color for all #content areas to light blue, and then overriding it back to white for any #content enclosed in a content namespace. We do the same for the "tab" backgrounds and some other elements. */ #content, #p-cactions li a:hover, #p-cactions li.selected a, #content div.thumb { background: #F8FCFF; /* a light blue */ } #p-cactions li a { background-color: #F7F9FB; /* Light blue-gray inactive tabs */ } .ns-0 #content, .ns-0 #p-cactions li a:hover, .ns-0 #p-cactions li.selected a, .ns-0 #content div.thumb, .ns-100 #content, .ns-100 #p-cactions li a:hover, .ns-100 #p-cactions li.selected a, .ns-100 #content div.thumb { background-color: white; /* Set back to white for books */ } .ns-0 #p-cactions li a, .ns-100 #p-cactions li a { background-color: #FBFBFB; /* Light gray inactive tabs in books */ } @media print { #content { background: white; } /* White background on print */ } /* END LIGHT BLUE SECTION */ /* Display "From Wikibooks, the open-content textbooks collection" */ #siteSub { display: inline; font-size: 100%; font-weight: normal; } /* Bold 'edit this page' link to encourage newcomers */ #ca-edit a { font-weight: bold !important; } #pt-login { font-weight: bold; font-size: 110%; } /* Accessibility experiment: make diff changes not just color-based */ .diffchange { font-weight: bold; background-color: inherit; } td.diff-addedline, td.diff-deletedline, td.diff-context { font-size: 85%; color: inherit; } p.error { font-weight: bold; } /* Class styles */ /* .toccolours added here because version in monobook/main.css wasn't being used by the print style */ .toccolours, .toccolors { border: 1px solid #aaaaaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; } /* Don't underline links in portlets and special characters list below edit window. */ .portlet a, #editpage-specialchars a { text-decoration: none; } .portlet a:hover, #editpage-specialchars a:hover { text-decoration: underline; } /* If you don't want to see special characters list at all, put the following line in your User:You/monobook.css file (and remove the double slash comments) */ /* #editpage-specialchars { display: none; } */ /* position top icons near the first heading in this skin */ div.topicon { position: absolute; z-index: 100; top: 10px; display: block !important; } div.topicon#infobox { right: 4.5em; } div.topicon#pdf { right: 6.5em; } div.topicon#pv { right: 8.5em; } /* Makes the background of a framed image white instead of gray. */ /* Only visible with transparent images. */ div.thumb div a img { background-color:#ffffff; } #top-navigation { position:absolute; right: 1.15em; top: 3.0em; } #bottom-navigation { clear:both; float:right; } /* End of Monobook skin */ ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=UTF-8; name=index.css Content-Location: http://en.wikibooks.org/w/index.php?title=-&action=raw&maxage=2678400&gen=css Content-Transfer-Encoding: 8bit /* generated user stylesheet */ a.new, #quickbar a.new { color: #CC2200; } ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=wikibits.js Content-Type: application/x-javascript; name=wikibits.js Content-Location: http://bits.wikimedia.org/skins-1.5/common/wikibits.js?urid=257z26_1264870003 Content-Transfer-Encoding: Base64 Ly8gTWVkaWFXaWtpIEphdmFTY3JpcHQgc3VwcG9ydCBmdW5jdGlvbnMKCnZhciBj bGllbnRQQyA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsgLy8g R2V0IGNsaWVudCBpbmZvCnZhciBpc19nZWNrbyA9IC9nZWNrby8udGVzdCggY2xp ZW50UEMgKSAmJgoJIS9raHRtbHxzcG9vZmVyfG5ldHNjYXBlXC83XC4wLy50ZXN0 KGNsaWVudFBDKTsKdmFyIHdlYmtpdF9tYXRjaCA9IGNsaWVudFBDLm1hdGNoKC9h cHBsZXdlYmtpdFwvKFxkKykvKTsKaWYgKHdlYmtpdF9tYXRjaCkgewoJdmFyIGlz X3NhZmFyaSA9IGNsaWVudFBDLmluZGV4T2YoJ2FwcGxld2Via2l0JykgIT0gLTEg JiYKCQljbGllbnRQQy5pbmRleE9mKCdzcG9vZmVyJykgPT0gLTE7Cgl2YXIgaXNf c2FmYXJpX3dpbiA9IGlzX3NhZmFyaSAmJiBjbGllbnRQQy5pbmRleE9mKCd3aW5k b3dzJykgIT0gLTE7Cgl2YXIgd2Via2l0X3ZlcnNpb24gPSBwYXJzZUludCh3ZWJr aXRfbWF0Y2hbMV0pOwp9Ci8vIEZvciBhY2Nlc3NrZXlzOyBub3RlIHRoYXQgRkYz KyBpcyBpbmNsdWRlZCBoZXJlIQp2YXIgaXNfZmYyID0gL2ZpcmVmb3hcL1syLTld fG1pbmVmaWVsZFwvMy8udGVzdCggY2xpZW50UEMgKTsKdmFyIGZmMl9idWdzID0g L2ZpcmVmb3hcLzIvLnRlc3QoIGNsaWVudFBDICk7Ci8vIFRoZXNlIGFyZW4ndCB1 c2VkIGhlcmUsIGJ1dCBzb21lIGN1c3RvbSBzY3JpcHRzIHJlbHkgb24gdGhlbQp2 YXIgaXNfZmYyX3dpbiA9IGlzX2ZmMiAmJiBjbGllbnRQQy5pbmRleE9mKCd3aW5k b3dzJykgIT0gLTE7CnZhciBpc19mZjJfeDExID0gaXNfZmYyICYmIGNsaWVudFBD LmluZGV4T2YoJ3gxMScpICE9IC0xOwppZiAoY2xpZW50UEMuaW5kZXhPZignb3Bl cmEnKSAhPSAtMSkgewoJdmFyIGlzX29wZXJhID0gdHJ1ZTsKCXZhciBpc19vcGVy YV9wcmVzZXZlbiA9IHdpbmRvdy5vcGVyYSAmJiAhZG9jdW1lbnQuY2hpbGROb2Rl czsKCXZhciBpc19vcGVyYV9zZXZlbiA9IHdpbmRvdy5vcGVyYSAmJiBkb2N1bWVu dC5jaGlsZE5vZGVzOwoJdmFyIGlzX29wZXJhXzk1ID0gL29wZXJhXC8oOVwuWzUt OV18WzEtOV1bMC05XSkvLnRlc3QoIGNsaWVudFBDICk7Cgl2YXIgb3BlcmE2X2J1 Z3MgPSBpc19vcGVyYV9wcmVzZXZlbjsKCXZhciBvcGVyYTdfYnVncyA9IGlzX29w ZXJhX3NldmVuICYmICFpc19vcGVyYV85NTsKCXZhciBvcGVyYTk1X2J1Z3MgPSAv b3BlcmFcLyg5XC41KS8udGVzdCggY2xpZW50UEMgKTsKfQoKLy8gR2xvYmFsIGV4 dGVybmFsIG9iamVjdHMgdXNlZCBieSB0aGlzIHNjcmlwdC4KLypleHRlcm4gdGEs IHN0eWxlcGF0aCwgc2tpbiAqLwoKLy8gYWRkIGFueSBvbmxvYWQgZnVuY3Rpb25z IGluIHRoaXMgaG9vayAocGxlYXNlIGRvbid0IGhhcmQtY29kZSBhbnkgZXZlbnRz IGluIHRoZSB4aHRtbCBzb3VyY2UpCnZhciBkb25lT25sb2FkSG9vazsKCmlmICgh d2luZG93Lm9ubG9hZEZ1bmN0cykgewoJdmFyIG9ubG9hZEZ1bmN0cyA9IFtdOwp9 CgovLyBjb2RlIHRoYXQgaXMgZGVwZW5kZW50IG9uIGpzMiBmdW5jdGlvbnMgc2hv dWxkIHVzZSBqczJBZGRPbmxvYWRIb29rCmZ1bmN0aW9uIGFkZE9ubG9hZEhvb2so aG9va0Z1bmN0KSB7CgkvLyBBbGxvd3MgYWRkLW9uIHNjcmlwdHMgdG8gYWRkIG9u bG9hZCBmdW5jdGlvbnMKCWlmKCFkb25lT25sb2FkSG9vaykgewoJCW9ubG9hZEZ1 bmN0c1tvbmxvYWRGdW5jdHMubGVuZ3RoXSA9IGhvb2tGdW5jdDsKCX0gZWxzZSB7 CgkJaG9va0Z1bmN0KCk7ICAvLyBidWcgaW4gTVNJRSBzY3JpcHQgbG9hZGluZwoJ fQp9CgoKZnVuY3Rpb24gaG9va0V2ZW50KGhvb2tOYW1lLCBob29rRnVuY3QpIHsK CWFkZEhhbmRsZXIod2luZG93LCBob29rTmFtZSwgaG9va0Z1bmN0KTsKfQoKZnVu Y3Rpb24gaW1wb3J0U2NyaXB0KHBhZ2UpIHsKCS8vIFRPRE86IG1pZ2h0IHdhbnQg dG8gaW50cm9kdWNlIGEgdXRpbGl0eSBmdW5jdGlvbiB0byBtYXRjaCB3ZlVybGVu Y29kZSgpIGluIFBIUAoJdmFyIHVyaSA9IHdnU2NyaXB0ICsgJz90aXRsZT0nICsK CQllbmNvZGVVUklDb21wb25lbnQocGFnZS5yZXBsYWNlKC8gL2csJ18nKSkucmVw bGFjZSgvJTJGL2lnLCcvJykucmVwbGFjZSgvJTNBL2lnLCc6JykgKwoJCScmYWN0 aW9uPXJhdyZjdHlwZT10ZXh0L2phdmFzY3JpcHQnOwoJcmV0dXJuIGltcG9ydFNj cmlwdFVSSSh1cmkpOwp9Cgp2YXIgbG9hZGVkU2NyaXB0cyA9IHt9OyAvLyBpbmNs dWRlZC1zY3JpcHRzIHRyYWNrZXIKZnVuY3Rpb24gaW1wb3J0U2NyaXB0VVJJKHVy bCkgewoJaWYgKGxvYWRlZFNjcmlwdHNbdXJsXSkgewoJCXJldHVybiBudWxsOwoJ fQoJbG9hZGVkU2NyaXB0c1t1cmxdID0gdHJ1ZTsKCXZhciBzID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CglzLnNldEF0dHJpYnV0ZSgnc3JjJyx1 cmwpOwoJcy5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCd0ZXh0L2phdmFzY3JpcHQnKTsK CWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5k Q2hpbGQocyk7CglyZXR1cm4gczsKfQoKZnVuY3Rpb24gaW1wb3J0U3R5bGVzaGVl dChwYWdlKSB7CglyZXR1cm4gaW1wb3J0U3R5bGVzaGVldFVSSSh3Z1NjcmlwdCAr ICc/YWN0aW9uPXJhdyZjdHlwZT10ZXh0L2NzcyZ0aXRsZT0nICsgZW5jb2RlVVJJ Q29tcG9uZW50KHBhZ2UucmVwbGFjZSgvIC9nLCdfJykpKTsKfQoKZnVuY3Rpb24g aW1wb3J0U3R5bGVzaGVldFVSSSh1cmwsbWVkaWEpIHsKCXZhciBsID0gZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgnbGluaycpOwoJbC50eXBlID0gJ3RleHQvY3NzJzsK CWwucmVsID0gJ3N0eWxlc2hlZXQnOwoJbC5ocmVmID0gdXJsOwoJaWYobWVkaWEp IGwubWVkaWEgPSBtZWRpYQoJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo J2hlYWQnKVswXS5hcHBlbmRDaGlsZChsKTsKCXJldHVybiBsOwp9CgpmdW5jdGlv biBhcHBlbmRDU1ModGV4dCkgewoJdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdzdHlsZScpOwoJcy50eXBlID0gJ3RleHQvY3NzJzsKCXMucmVsID0gJ3N0 eWxlc2hlZXQnOwoJaWYgKHMuc3R5bGVTaGVldCkgcy5zdHlsZVNoZWV0LmNzc1Rl eHQgPSB0ZXh0IC8vSUUKCWVsc2Ugcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh dGVUZXh0Tm9kZSh0ZXh0ICsgJycpKSAvL1NhZmFyaSBzb21ldGltZXMgYm9ya3Mg b24gbnVsbAoJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVsw XS5hcHBlbmRDaGlsZChzKTsKCXJldHVybiBzOwp9CgovLyBzcGVjaWFsIHN0eWxl c2hlZXQgbGlua3MKaWYgKHR5cGVvZiBzdHlsZXBhdGggIT0gJ3VuZGVmaW5lZCcg JiYgdHlwZW9mIHNraW4gIT0gJ3VuZGVmaW5lZCcpIHsKCS8vIEZJWE1FOiBUaGlz IHRyaWVzIHRvIGxvYWQgdGhlIHN0eWxlc2hlZXRzIGV2ZW4gZm9yIHNraW5zIHdo ZXJlIHRoZXkKCS8vIGRvbid0IGV4aXN0LCBpLmUuLCBldmVyeXRoaW5nIGJ1dCBN b25vYm9vay4KCWlmIChvcGVyYTZfYnVncykgewoJCWltcG9ydFN0eWxlc2hlZXRV Ukkoc3R5bGVwYXRoKycvJytza2luKycvT3BlcmE2Rml4ZXMuY3NzJyk7Cgl9IGVs c2UgaWYgKG9wZXJhN19idWdzKSB7CgkJaW1wb3J0U3R5bGVzaGVldFVSSShzdHls ZXBhdGgrJy8nK3NraW4rJy9PcGVyYTdGaXhlcy5jc3MnKTsKCX0gZWxzZSBpZiAo b3BlcmE5NV9idWdzKSB7CgkJaW1wb3J0U3R5bGVzaGVldFVSSShzdHlsZXBhdGgr Jy8nK3NraW4rJy9PcGVyYTlGaXhlcy5jc3MnKTsKCX0gZWxzZSBpZiAoZmYyX2J1 Z3MpIHsKCQlpbXBvcnRTdHlsZXNoZWV0VVJJKHN0eWxlcGF0aCsnLycrc2tpbisn L0ZGMkZpeGVzLmNzcycpOwoJfQp9CgoKaWYgKHdnQnJlYWtGcmFtZXMpIHsKCS8v IFVuLXRyYXAgdXMgZnJvbSBmcmFtZXNldHMKCWlmICh3aW5kb3cudG9wICE9IHdp bmRvdykgewoJCXdpbmRvdy50b3AubG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247 Cgl9Cn0KCmZ1bmN0aW9uIHNob3dUb2NUb2dnbGUoKSB7CglpZiAoZG9jdW1lbnQu Y3JlYXRlVGV4dE5vZGUpIHsKCQkvLyBVc2VzIERPTSBjYWxscyB0byBhdm9pZCBk b2N1bWVudC53cml0ZSArIFhIVE1MIGlzc3VlcwoKCQl2YXIgbGlua0hvbGRlciA9 IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2N0aXRsZScpOwoJCXZhciBleGlz dGluZ0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9nZ2xlbGluaycp OwoJCWlmICghbGlua0hvbGRlciB8fCBleGlzdGluZ0xpbmspIHsKCQkJLy8gRG9u J3QgYWRkIHRoZSB0b2dnbGUgbGluayB0d2ljZQoJCQlyZXR1cm47CgkJfQoKCQl2 YXIgb3V0ZXJTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwoJ CW91dGVyU3Bhbi5jbGFzc05hbWUgPSAndG9jdG9nZ2xlJzsKCgkJdmFyIHRvZ2ds ZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CgkJdG9nZ2xlTGlu ay5pZCA9ICd0b2dnbGVsaW5rJzsKCQl0b2dnbGVMaW5rLmNsYXNzTmFtZSA9ICdp bnRlcm5hbCc7CgkJdG9nZ2xlTGluay5ocmVmID0gJ2phdmFzY3JpcHQ6dG9nZ2xl VG9jKCknOwoJCXRvZ2dsZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl VGV4dE5vZGUodG9jSGlkZVRleHQpKTsKCgkJb3V0ZXJTcGFuLmFwcGVuZENoaWxk KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdbJykpOwoJCW91dGVyU3Bhbi5hcHBl bmRDaGlsZCh0b2dnbGVMaW5rKTsKCQlvdXRlclNwYW4uYXBwZW5kQ2hpbGQoZG9j dW1lbnQuY3JlYXRlVGV4dE5vZGUoJ10nKSk7CgoJCWxpbmtIb2xkZXIuYXBwZW5k Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAnKSk7CgkJbGlua0hvbGRl ci5hcHBlbmRDaGlsZChvdXRlclNwYW4pOwoKCQl2YXIgY29va2llUG9zID0gZG9j dW1lbnQuY29va2llLmluZGV4T2YoImhpZGV0b2M9Iik7CgkJaWYgKGNvb2tpZVBv cyA+IC0xICYmIGRvY3VtZW50LmNvb2tpZS5jaGFyQXQoY29va2llUG9zICsgOCkg PT0gMSkgewoJCQl0b2dnbGVUb2MoKTsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIGNoYW5n ZVRleHQoZWwsIG5ld1RleHQpIHsKCS8vIFNhZmFyaSB3b3JrIGFyb3VuZAoJaWYg KGVsLmlubmVyVGV4dCkgewoJCWVsLmlubmVyVGV4dCA9IG5ld1RleHQ7Cgl9IGVs c2UgaWYgKGVsLmZpcnN0Q2hpbGQgJiYgZWwuZmlyc3RDaGlsZC5ub2RlVmFsdWUp IHsKCQllbC5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IG5ld1RleHQ7Cgl9Cn0KCmZ1 bmN0aW9uIHRvZ2dsZVRvYygpIHsKCXZhciB0b2NtYWluID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoJ3RvYycpOwoJdmFyIHRvYyA9IGRvY3VtZW50LmdldEVsZW1l bnRCeUlkKCd0b2MnKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndWwnKVswXTsKCXZh ciB0b2dnbGVMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvZ2dsZWxp bmsnKTsKCglpZiAodG9jICYmIHRvZ2dsZUxpbmsgJiYgdG9jLnN0eWxlLmRpc3Bs YXkgPT0gJ25vbmUnKSB7CgkJY2hhbmdlVGV4dCh0b2dnbGVMaW5rLCB0b2NIaWRl VGV4dCk7CgkJdG9jLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwoJCWRvY3VtZW50 LmNvb2tpZSA9ICJoaWRldG9jPTAiOwoJCXRvY21haW4uY2xhc3NOYW1lID0gJ3Rv Yyc7Cgl9IGVsc2UgewoJCWNoYW5nZVRleHQodG9nZ2xlTGluaywgdG9jU2hvd1Rl eHQpOwoJCXRvYy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCWRvY3VtZW50LmNv b2tpZSA9ICJoaWRldG9jPTEiOwoJCXRvY21haW4uY2xhc3NOYW1lID0gJ3RvYyB0 b2NoaWRkZW4nOwoJfQp9Cgp2YXIgbXdFZGl0QnV0dG9ucyA9IFtdOwp2YXIgbXdD dXN0b21FZGl0QnV0dG9ucyA9IFtdOyAvLyBlZyB0byBhZGQgaW4gTWVkaWFXaWtp OkNvbW1vbi5qcwoKZnVuY3Rpb24gZXNjYXBlUXVvdGVzKHRleHQpIHsKCXZhciBy ZSA9IG5ldyBSZWdFeHAoIiciLCJnIik7Cgl0ZXh0ID0gdGV4dC5yZXBsYWNlKHJl LCJcXCciKTsKCXJlID0gbmV3IFJlZ0V4cCgiXFxuIiwiZyIpOwoJdGV4dCA9IHRl eHQucmVwbGFjZShyZSwiXFxuIik7CglyZXR1cm4gZXNjYXBlUXVvdGVzSFRNTCh0 ZXh0KTsKfQoKZnVuY3Rpb24gZXNjYXBlUXVvdGVzSFRNTCh0ZXh0KSB7Cgl2YXIg cmUgPSBuZXcgUmVnRXhwKCcmJywiZyIpOwoJdGV4dCA9IHRleHQucmVwbGFjZShy ZSwiJmFtcDsiKTsKCXJlID0gbmV3IFJlZ0V4cCgnIicsImciKTsKCXRleHQgPSB0 ZXh0LnJlcGxhY2UocmUsIiZxdW90OyIpOwoJcmUgPSBuZXcgUmVnRXhwKCc8Jywi ZyIpOwoJdGV4dCA9IHRleHQucmVwbGFjZShyZSwiJmx0OyIpOwoJcmUgPSBuZXcg UmVnRXhwKCc+JywiZyIpOwoJdGV4dCA9IHRleHQucmVwbGFjZShyZSwiJmd0OyIp OwoJcmV0dXJuIHRleHQ7Cn0KCgovKioKICogU2V0IHRoZSBhY2Nlc3NrZXkgcHJl Zml4IGJhc2VkIG9uIGJyb3dzZXIgZGV0ZWN0aW9uLgogKi8KdmFyIHRvb2x0aXBB Y2Nlc3NLZXlQcmVmaXggPSAnYWx0LSc7CmlmIChpc19vcGVyYSkgewoJdG9vbHRp cEFjY2Vzc0tleVByZWZpeCA9ICdzaGlmdC1lc2MtJzsKfSBlbHNlIGlmICghaXNf c2FmYXJpX3dpbiAmJiBpc19zYWZhcmkgJiYgd2Via2l0X3ZlcnNpb24gPiA1MjYp IHsKCXRvb2x0aXBBY2Nlc3NLZXlQcmVmaXggPSAnY3RybC1hbHQtJzsKfSBlbHNl IGlmICghaXNfc2FmYXJpX3dpbiAmJiAoaXNfc2FmYXJpCgkJfHwgY2xpZW50UEMu aW5kZXhPZignbWFjJykgIT0gLTEKCQl8fCBjbGllbnRQQy5pbmRleE9mKCdrb25x dWVyb3InKSAhPSAtMSApKSB7Cgl0b29sdGlwQWNjZXNzS2V5UHJlZml4ID0gJ2N0 cmwtJzsKfSBlbHNlIGlmIChpc19mZjIpIHsKCXRvb2x0aXBBY2Nlc3NLZXlQcmVm aXggPSAnYWx0LXNoaWZ0LSc7Cn0KdmFyIHRvb2x0aXBBY2Nlc3NLZXlSZWdleHAg PSAvXFsoY3RybC0pPyhhbHQtKT8oc2hpZnQtKT8oZXNjLSk/KC4pXF0kLzsKCi8q KgogKiBBZGQgdGhlIGFwcHJvcHJpYXRlIHByZWZpeCB0byB0aGUgYWNjZXNza2V5 IHNob3duIGluIHRoZSB0b29sdGlwLgogKiBJZiB0aGUgbm9kZUxpc3QgcGFyYW1l dGVyIGlzIGdpdmVuLCBvbmx5IHRob3NlIG5vZGVzIGFyZSB1cGRhdGVkOwogKiBv dGhlcndpc2UsIGFsbCB0aGUgbm9kZXMgdGhhdCB3aWxsIHByb2JhYmx5IGhhdmUg YWNjZXNza2V5cyBieQogKiBkZWZhdWx0IGFyZSB1cGRhdGVkLgogKgogKiBAcGFy YW0gQXJyYXkgbm9kZUxpc3QgLS0gbGlzdCBvZiBlbGVtZW50cyB0byB1cGRhdGUK ICovCmZ1bmN0aW9uIHVwZGF0ZVRvb2x0aXBBY2Nlc3NLZXlzKCBub2RlTGlzdCAp IHsKCWlmICggIW5vZGVMaXN0ICkgewoJCS8vIFJhdGhlciB0aGFuIHNjYW4gYWxs IGxpbmtzIG9uIHRoZSB3aG9sZSBwYWdlLCB3ZSBjYW4ganVzdCBzY2FuIHRoZXNl CgkJLy8gY29udGFpbmVycyB3aGljaCBjb250YWluIHRoZSByZWxldmFudCBsaW5r cy4gVGhpcyBpcyByZWFsbHkganVzdCBhbgoJCS8vIG9wdGltaXphdGlvbiB0ZWNo bmlxdWUuCgkJdmFyIGxpbmtDb250YWluZXJzID0gWwoJCQkiY29sdW1uLW9uZSIs IC8vIE1vbm9ib29rIGFuZCBNb2Rlcm4KCQkJImhlYWQiLCAicGFuZWwiLCAicC1s b2dvIiAvLyBWZWN0b3IKCQldOwoJCWZvciAoIHZhciBpIGluIGxpbmtDb250YWlu ZXJzICkgewoJCQl2YXIgbGlua0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1l bnRCeUlkKCBsaW5rQ29udGFpbmVyc1tpXSApOwoJCQlpZiAoIGxpbmtDb250YWlu ZXIgKSB7CgkJCQl1cGRhdGVUb29sdGlwQWNjZXNzS2V5cyggbGlua0NvbnRhaW5l ci5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpICk7CgkJCX0KCQl9CgkJLy8gdGhl c2UgYXJlIHJhcmUgZW5vdWdoIHRoYXQgbm8gc3VjaCBvcHRpbWl6YXRpb24gaXMg bmVlZGVkCgkJdXBkYXRlVG9vbHRpcEFjY2Vzc0tleXMoIGRvY3VtZW50LmdldEVs ZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpICk7CgkJdXBkYXRlVG9vbHRpcEFjY2Vz c0tleXMoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYWJlbCIpICk7 CgkJcmV0dXJuOwoJfQoKCWZvciAoIHZhciBpID0gMDsgaSA8IG5vZGVMaXN0Lmxl bmd0aDsgaSsrICkgewoJCXZhciBlbGVtZW50ID0gbm9kZUxpc3RbaV07CgkJdmFy IHRpcCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpOwoJCWlmICggdGlw ICYmIHRvb2x0aXBBY2Nlc3NLZXlSZWdleHAuZXhlYyh0aXApICkgewoJCQl0aXAg PSB0aXAucmVwbGFjZSh0b29sdGlwQWNjZXNzS2V5UmVnZXhwLAoJCQkJCSAgIlsi K3Rvb2x0aXBBY2Nlc3NLZXlQcmVmaXgrIiQ1XSIpOwoJCQllbGVtZW50LnNldEF0 dHJpYnV0ZSgidGl0bGUiLCB0aXAgKTsKCQl9Cgl9Cn0KCi8qKgogKiBBZGQgYSBs aW5rIHRvIG9uZSBvZiB0aGUgcG9ydGxldCBtZW51cyBvbiB0aGUgcGFnZSwgaW5j bHVkaW5nOgogKgogKiBwLWNhY3Rpb25zOiBDb250ZW50IGFjdGlvbnMgKHNob3du IGFzIHRhYnMgYWJvdmUgdGhlIG1haW4gY29udGVudCBpbiBNb25vYm9vaykKICog cC1wZXJzb25hbDogUGVyc29uYWwgdG9vbHMgKHNob3duIGF0IHRoZSB0b3Agcmln aHQgb2YgdGhlIHBhZ2UgaW4gTW9ub2Jvb2spCiAqIHAtbmF2aWdhdGlvbjogTmF2 aWdhdGlvbgogKiBwLXRiOiBUb29sYm94CiAqCiAqIFRoaXMgZnVuY3Rpb24gZXhp c3RzIGZvciB0aGUgY29udmVuaWVuY2Ugb2YgY3VzdG9tIEpTIGF1dGhvcnMuICBB bGwKICogYnV0IHRoZSBmaXJzdCB0aHJlZSBwYXJhbWV0ZXJzIGFyZSBvcHRpb25h bCwgdGhvdWdoIHByb3ZpZGluZyBhdAogKiBsZWFzdCBhbiBpZCBhbmQgYSB0b29s dGlwIGlzIHJlY29tbWVuZGVkLgogKgogKiBCeSBkZWZhdWx0IHRoZSBuZXcgbGlu ayB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuICBUbwogKiBh ZGQgdGhlIGxpbmsgYmVmb3JlIGEgZ2l2ZW4gZXhpc3RpbmcgaXRlbSwgcGFzcyB0 aGUgRE9NIG5vZGUgb2YKICogdGhhdCBpdGVtIChlYXNpbHkgb2J0YWluZWQgd2l0 aCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgpKSBhcyB0aGUKICogbmV4dG5vZGUg cGFyYW1ldGVyOyB0byBhZGQgdGhlIGxpbmsgX2FmdGVyXyBhbiBleGlzdGluZyBp dGVtLCBwYXNzCiAqIHRoZSBub2RlJ3MgbmV4dFNpYmxpbmcgaW5zdGVhZC4KICoK ICogQHBhcmFtIFN0cmluZyBwb3J0bGV0IC0tIGlkIG9mIHRoZSB0YXJnZXQgcG9y dGxldCAoInAtY2FjdGlvbnMiLCAicC1wZXJzb25hbCIsICJwLW5hdmlnYXRpb24i IG9yICJwLXRiIikKICogQHBhcmFtIFN0cmluZyBocmVmIC0tIGxpbmsgVVJMCiAq IEBwYXJhbSBTdHJpbmcgdGV4dCAtLSBsaW5rIHRleHQgKHdpbGwgYmUgYXV0b21h dGljYWxseSBsb3dlcmNhc2VkIGJ5IENTUyBmb3IgcC1jYWN0aW9ucyBpbiBNb25v Ym9vaykKICogQHBhcmFtIFN0cmluZyBpZCAtLSBpZCBvZiB0aGUgbmV3IGl0ZW0s IHNob3VsZCBiZSB1bmlxdWUgYW5kIHByZWZlcmFibHkgaGF2ZSB0aGUgYXBwcm9w cmlhdGUgcHJlZml4ICgiY2EtIiwgInB0LSIsICJuLSIgb3IgInQtIikKICogQHBh cmFtIFN0cmluZyB0b29sdGlwIC0tIHRleHQgdG8gc2hvdyB3aGVuIGhvdmVyaW5n IG92ZXIgdGhlIGxpbmssIHdpdGhvdXQgYWNjZXNza2V5IHN1ZmZpeAogKiBAcGFy YW0gU3RyaW5nIGFjY2Vzc2tleSAtLSBhY2Nlc3NrZXkgdG8gYWN0aXZhdGUgdGhp cyBsaW5rIChvbmUgY2hhcmFjdGVyLCB0cnkgdG8gYXZvaWQgY29uZmxpY3RzKQog KiBAcGFyYW0gTm9kZSBuZXh0bm9kZSAtLSB0aGUgRE9NIG5vZGUgYmVmb3JlIHdo aWNoIHRoZSBuZXcgaXRlbSBzaG91bGQgYmUgYWRkZWQsIHNob3VsZCBiZSBhbm90 aGVyIGl0ZW0gaW4gdGhlIHNhbWUgbGlzdAogKgogKiBAcmV0dXJuIE5vZGUgLS0g dGhlIERPTSBub2RlIG9mIHRoZSBuZXcgaXRlbSAoYW4gTEkgZWxlbWVudCkgb3Ig bnVsbAogKi8KZnVuY3Rpb24gYWRkUG9ydGxldExpbmsocG9ydGxldCwgaHJlZiwg dGV4dCwgaWQsIHRvb2x0aXAsIGFjY2Vzc2tleSwgbmV4dG5vZGUpIHsKCXZhciBy b290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocG9ydGxldCk7CglpZiAoICFy b290ICkgcmV0dXJuIG51bGw7Cgl2YXIgbm9kZSA9IHJvb3QuZ2V0RWxlbWVudHNC eVRhZ05hbWUoICJ1bCIgKVswXTsKCWlmICggIW5vZGUgKSByZXR1cm4gbnVsbDsK CgkvLyB1bmhpZGUgcG9ydGxldCBpZiBpdCB3YXMgaGlkZGVuIGJlZm9yZQoJcm9v dC5jbGFzc05hbWUgPSByb290LmNsYXNzTmFtZS5yZXBsYWNlKCAvKF58ICllbXB0 eVBvcnRsZXQoIHwkKS8sICIkMiIgKTsKCgl2YXIgc3BhbiA9IGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoICJzcGFuIiApOwoJc3Bhbi5hcHBlbmRDaGlsZCggZG9jdW1l bnQuY3JlYXRlVGV4dE5vZGUoIHRleHQgKSApOwoKCXZhciBsaW5rID0gZG9jdW1l bnQuY3JlYXRlRWxlbWVudCggImEiICk7CglsaW5rLmFwcGVuZENoaWxkKCBzcGFu ICk7CglsaW5rLmhyZWYgPSBocmVmOwoKCXZhciBpdGVtID0gZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCggImxpIiApOwoJaXRlbS5hcHBlbmRDaGlsZCggbGluayApOwoJ aWYgKCBpZCApIGl0ZW0uaWQgPSBpZDsKCglpZiAoIGFjY2Vzc2tleSApIHsKCQls aW5rLnNldEF0dHJpYnV0ZSggImFjY2Vzc2tleSIsIGFjY2Vzc2tleSApOwoJCXRv b2x0aXAgKz0gIiBbIithY2Nlc3NrZXkrIl0iOwoJfQoJaWYgKCB0b29sdGlwICkg ewoJCWxpbmsuc2V0QXR0cmlidXRlKCAidGl0bGUiLCB0b29sdGlwICk7Cgl9Cglp ZiAoIGFjY2Vzc2tleSAmJiB0b29sdGlwICkgewoJCXVwZGF0ZVRvb2x0aXBBY2Nl c3NLZXlzKCBuZXcgQXJyYXkoIGxpbmsgKSApOwoJfQoKCWlmICggbmV4dG5vZGUg JiYgbmV4dG5vZGUucGFyZW50Tm9kZSA9PSBub2RlICkKCQlub2RlLmluc2VydEJl Zm9yZSggaXRlbSwgbmV4dG5vZGUgKTsKCWVsc2UKCQlub2RlLmFwcGVuZENoaWxk KCBpdGVtICk7ICAvLyBJRSBjb21wYXRpYmlsaXR5ICg/KQoKCXJldHVybiBpdGVt Owp9CgpmdW5jdGlvbiBnZXRJbm5lclRleHQoZWwpIHsKCWlmICh0eXBlb2YgZWwg PT0gInN0cmluZyIpIHJldHVybiBlbDsKCWlmICh0eXBlb2YgZWwgPT0gInVuZGVm aW5lZCIpIHsgcmV0dXJuIGVsIH07CglpZiAoZWwudGV4dENvbnRlbnQpIHJldHVy biBlbC50ZXh0Q29udGVudDsgLy8gbm90IG5lZWRlZCBidXQgaXQgaXMgZmFzdGVy CglpZiAoZWwuaW5uZXJUZXh0KSByZXR1cm4gZWwuaW5uZXJUZXh0OyAgICAgLy8g SUUgZG9lc24ndCBoYXZlIHRleHRDb250ZW50Cgl2YXIgc3RyID0gIiI7CgoJdmFy IGNzID0gZWwuY2hpbGROb2RlczsKCXZhciBsID0gY3MubGVuZ3RoOwoJZm9yICh2 YXIgaSA9IDA7IGkgPCBsOyBpKyspIHsKCQlzd2l0Y2ggKGNzW2ldLm5vZGVUeXBl KSB7CgkJCWNhc2UgMTogLy9FTEVNRU5UX05PREUKCQkJCXN0ciArPSB0c19nZXRJ bm5lclRleHQoY3NbaV0pOwoJCQkJYnJlYWs7CgkJCWNhc2UgMzoJLy9URVhUX05P REUKCQkJCXN0ciArPSBjc1tpXS5ub2RlVmFsdWU7CgkJCQlicmVhazsKCQl9Cgl9 CglyZXR1cm4gc3RyOwp9CgoKLyoqCiAqIFNldCB1cCBhY2Nlc3NrZXlzL3Rvb2x0 aXBzIGZyb20gdGhlIGRlcHJlY2F0ZWQgdGEgYXJyYXkuICBJZiBkb0lkCiAqIGlz IHNwZWNpZmllZCwgb25seSBzZXQgdXAgZm9yIHRoYXQgaWQuICBOb3RlIHRoYXQg dGhpcyBmdW5jdGlvbiBpcwogKiBkZXByZWNhdGVkIGFuZCB3aWxsIG5vdCBiZSBz dXBwb3J0ZWQgaW5kZWZpbml0ZWx5IC0tIHVzZQogKiB1cGRhdGVUb29sdGlwQWNj ZXNzS2V5KCkgaW5zdGVhZC4KICoKICogQHBhcmFtIG1peGVkIGRvSWQgc3RyaW5n IG9yIG51bGwKICovCmZ1bmN0aW9uIGFrZXl0dCggZG9JZCApIHsKCS8vIEEgbG90 IG9mIHVzZXIgc2NyaXB0cyAoYW5kIHNvbWUgb2YgdGhlIGNvZGUgYmVsb3cpIGJy ZWFrIGlmCgkvLyB0YSBpc24ndCBkZWZpbmVkLCBzbyB3ZSBtYWtlIHN1cmUgaXQg aXMuICBFeHBsaWN0bHkgdXNpbmcKCS8vIHdpbmRvdy50YSBhdm9pZHMgYSAidGEg aXMgbm90IGRlZmluZWQiIGVycm9yLgoJaWYgKCF3aW5kb3cudGEpIHdpbmRvdy50 YSA9IG5ldyBBcnJheTsKCgkvLyBNYWtlIGEgbG9jYWwsIHBvc3NpYmx5IHJlc3Ry aWN0ZWQsIGNvcHkgdG8gYXZvaWQgY2xvYmJlcmluZwoJLy8gdGhlIG9yaWdpbmFs LgoJdmFyIHRhOwoJaWYgKCBkb0lkICkgewoJCXRhID0gW2RvSWRdOwoJfSBlbHNl IHsKCQl0YSA9IHdpbmRvdy50YTsKCX0KCgkvLyBOb3cgZGVhbCB3aXRoIGV2aWwg ZGVwcmVjYXRlZCB0YQoJdmFyIHdhdGNoQ2hlY2tib3hFeGlzdHMgPSBkb2N1bWVu dC5nZXRFbGVtZW50QnlJZCggJ3dwV2F0Y2h0aGlzJyApID8gdHJ1ZSA6IGZhbHNl OwoJZm9yICh2YXIgaWQgaW4gdGEpIHsKCQl2YXIgbiA9IGRvY3VtZW50LmdldEVs ZW1lbnRCeUlkKGlkKTsKCQlpZiAobikgewoJCQl2YXIgYSA9IG51bGw7CgkJCXZh ciBhayA9ICcnOwoJCQkvLyBBcmUgd2UgcHV0dGluZyBhY2Nlc3NrZXkgaW4gaXQK CQkJaWYgKHRhW2lkXVswXS5sZW5ndGggPiAwKSB7CgkJCQkvLyBJcyB0aGlzIG9i amVjdCBhIG9iamVjdD8gSWYgbm90IGFzc3VtZSBpdCdzIHRoZSBuZXh0IGNoaWxk LgoKCQkJCWlmIChuLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gImEiKSB7CgkJ CQkJYSA9IG47CgkJCQl9IGVsc2UgewoJCQkJCWEgPSBuLmNoaWxkTm9kZXNbMF07 CgkJCQl9CgkJCSAJLy8gRG9uJ3QgYWRkIGFuIGFjY2Vzc2tleSBmb3IgdGhlIHdh dGNoIHRhYiBpZiB0aGUgd2F0Y2gKCQkJIAkvLyBjaGVja2JveCBpcyBhbHNvIGF2 YWlsYWJsZS4KCQkJCWlmIChhICYmICgoaWQgIT0gJ2NhLXdhdGNoJyAmJiBpZCAh PSAnY2EtdW53YXRjaCcpIHx8ICF3YXRjaENoZWNrYm94RXhpc3RzKSkgewoJCQkJ CWEuYWNjZXNzS2V5ID0gdGFbaWRdWzBdOwoJCQkJCWFrID0gJyBbJyt0b29sdGlw QWNjZXNzS2V5UHJlZml4K3RhW2lkXVswXSsnXSc7CgkJCQl9CgkJCX0gZWxzZSB7 CgkJCQkvLyBXZSBkb24ndCBjYXJlIHdoYXQgdHlwZSB0aGUgb2JqZWN0IGlzIHdo ZW4gYXNzaWduaW5nIHRvb2x0aXAKCQkJCWEgPSBuOwoJCQkJYWsgPSAnJzsKCQkJ fQoKCQkJaWYgKGEpIHsKCQkJCWEudGl0bGUgPSB0YVtpZF1bMV0rYWs7CgkJCX0K CQl9Cgl9Cn0KCnZhciBjaGVja2JveGVzOwp2YXIgbGFzdENoZWNrYm94OwoKZnVu Y3Rpb24gc2V0dXBDaGVja2JveFNoaWZ0Q2xpY2soKSB7CgljaGVja2JveGVzID0g W107CglsYXN0Q2hlY2tib3ggPSBudWxsOwoJdmFyIGlucHV0cyA9IGRvY3VtZW50 LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOwoJYWRkQ2hlY2tib3hDbGlj a0hhbmRsZXJzKGlucHV0cyk7Cn0KCmZ1bmN0aW9uIGFkZENoZWNrYm94Q2xpY2tI YW5kbGVycyhpbnB1dHMsIHN0YXJ0KSB7CglpZiAoICFzdGFydCkgc3RhcnQgPSAw OwoKCXZhciBmaW5pc2ggPSBzdGFydCArIDI1MDsKCWlmICggZmluaXNoID4gaW5w dXRzLmxlbmd0aCApCgkJZmluaXNoID0gaW5wdXRzLmxlbmd0aDsKCglmb3IgKCB2 YXIgaSA9IHN0YXJ0OyBpIDwgZmluaXNoOyBpKysgKSB7CgkJdmFyIGNiID0gaW5w dXRzW2ldOwoJCWlmICggIWNiLnR5cGUgfHwgY2IudHlwZS50b0xvd2VyQ2FzZSgp ICE9ICdjaGVja2JveCcgKQoJCQljb250aW51ZTsKCQl2YXIgZW5kID0gY2hlY2ti b3hlcy5sZW5ndGg7CgkJY2hlY2tib3hlc1tlbmRdID0gY2I7CgkJY2IuaW5kZXgg PSBlbmQ7CgkJY2Iub25jbGljayA9IGNoZWNrYm94Q2xpY2tIYW5kbGVyOwoJfQoK CWlmICggZmluaXNoIDwgaW5wdXRzLmxlbmd0aCApIHsKCQlzZXRUaW1lb3V0KCBm dW5jdGlvbiAoKSB7CgkJCWFkZENoZWNrYm94Q2xpY2tIYW5kbGVycyhpbnB1dHMs IGZpbmlzaCk7CgkJfSwgMjAwICk7Cgl9Cn0KCmZ1bmN0aW9uIGNoZWNrYm94Q2xp Y2tIYW5kbGVyKGUpIHsKCWlmICh0eXBlb2YgZSA9PSAndW5kZWZpbmVkJykgewoJ CWUgPSB3aW5kb3cuZXZlbnQ7Cgl9CglpZiAoICFlLnNoaWZ0S2V5IHx8IGxhc3RD aGVja2JveCA9PT0gbnVsbCApIHsKCQlsYXN0Q2hlY2tib3ggPSB0aGlzLmluZGV4 OwoJCXJldHVybiB0cnVlOwoJfQoJdmFyIGVuZFN0YXRlID0gdGhpcy5jaGVja2Vk OwoJdmFyIHN0YXJ0LCBmaW5pc2g7CglpZiAoIHRoaXMuaW5kZXggPCBsYXN0Q2hl Y2tib3ggKSB7CgkJc3RhcnQgPSB0aGlzLmluZGV4ICsgMTsKCQlmaW5pc2ggPSBs YXN0Q2hlY2tib3g7Cgl9IGVsc2UgewoJCXN0YXJ0ID0gbGFzdENoZWNrYm94OwoJ CWZpbmlzaCA9IHRoaXMuaW5kZXggLSAxOwoJfQoJZm9yICh2YXIgaSA9IHN0YXJ0 OyBpIDw9IGZpbmlzaDsgKytpICkgewoJCWNoZWNrYm94ZXNbaV0uY2hlY2tlZCA9 IGVuZFN0YXRlOwoJCWlmKCBpID4gc3RhcnQgJiYgdHlwZW9mIGNoZWNrYm94ZXNb aV0ub25jaGFuZ2UgPT0gJ2Z1bmN0aW9uJyApCgkJCWNoZWNrYm94ZXNbaV0ub25j aGFuZ2UoKTsgLy8gZmlyZSB0cmlnZ2VycwoJfQoJbGFzdENoZWNrYm94ID0gdGhp cy5pbmRleDsKCXJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiB0b2dnbGVfZWxlbWVu dF9hY3RpdmF0aW9uKGlkYSxpZGIpIHsKCWlmICggIWRvY3VtZW50LmdldEVsZW1l bnRCeUlkICkgewoJCXJldHVybjsKCX0KCS8vIFNob3cgdGhlIGFwcHJvcHJpYXRl IHVwbG9hZCBzaXplIGxpbWl0IG1lc3NhZ2UKCWlmKCBpZGIgPT0gJ3dwVXBsb2Fk RmlsZVVSTCcgKSB7CgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgg J213LXVwbG9hZC1tYXhmaWxlc2l6ZScgKTsKCQlpZiggZSApIGUuc3R5bGUuZGlz cGxheSA9ICJub25lIjsKCgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCggJ213LXVwbG9hZC1tYXhmaWxlc2l6ZS11cmwnICk7CgkJaWYoIGUgKSBlLnN0 eWxlLmRpc3BsYXkgPSAiYmxvY2siOwoJfQoJaWYoIGlkYiA9PSAnd3BVcGxvYWRG aWxlJyApIHsKCQl2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnbXct dXBsb2FkLW1heGZpbGVzaXplLXVybCcgKTsKCQlpZiggZSApIGUuc3R5bGUuZGlz cGxheSA9ICAibm9uZSI7CgoJCXZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoICdtdy11cGxvYWQtbWF4ZmlsZXNpemUnICk7CgkJaWYoIGUgKSBlLnN0eWxl LmRpc3BsYXkgPSAgImJsb2NrIjsKCX0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlk KCBpZGEgKS5kaXNhYmxlZCA9IHRydWU7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCggaWRiICkuZGlzYWJsZWQgPSBmYWxzZTsKfQoKZnVuY3Rpb24gdG9nZ2xlX2Vs ZW1lbnRfY2hlY2soaWRhLGlkYikgewoJaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCkgewoJCXJldHVybjsKCX0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlk YSkuY2hlY2tlZD10cnVlOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRiKS5j aGVja2VkPWZhbHNlOwp9CgovKgoJV3JpdHRlbiBieSBKb25hdGhhbiBTbm9vaywg aHR0cDovL3d3dy5zbm9vay5jYS9qb25hdGhhbgoJQWRkLW9ucyBieSBSb2JlcnQg TnltYW4sIGh0dHA6Ly93d3cucm9iZXJ0bnltYW4uY29tCglBdXRob3Igc2F5cyAi VGhlIGNyZWRpdCBjb21tZW50IGlzIGFsbCBpdCB0YWtlcywgbm8gbGljZW5zZS4g R28gY3Jhenkgd2l0aCBpdCE6LSkiCglGcm9tIGh0dHA6Ly93d3cucm9iZXJ0bnlt YW4uY29tLzIwMDUvMTEvMDcvdGhlLXVsdGltYXRlLWdldGVsZW1lbnRzYnljbGFz c25hbWUvCiovCmZ1bmN0aW9uIGdldEVsZW1lbnRzQnlDbGFzc05hbWUob0VsbSwg c3RyVGFnTmFtZSwgb0NsYXNzTmFtZXMpewoJdmFyIGFyclJldHVybkVsZW1lbnRz ID0gbmV3IEFycmF5KCk7CglpZiAoIHR5cGVvZiggb0VsbS5nZXRFbGVtZW50c0J5 Q2xhc3NOYW1lICkgPT0gImZ1bmN0aW9uIiApIHsKCQkvKiBVc2UgYSBuYXRpdmUg aW1wbGVtZW50YXRpb24gd2hlcmUgcG9zc2libGUgRkYzLCBTYWYzLjIsIE9wZXJh IDkuNSAqLwoJCXZhciBhcnJOYXRpdmVSZXR1cm4gPSBvRWxtLmdldEVsZW1lbnRz QnlDbGFzc05hbWUoIG9DbGFzc05hbWVzICk7CgkJaWYgKCBzdHJUYWdOYW1lID09 ICIqIiApCgkJCXJldHVybiBhcnJOYXRpdmVSZXR1cm47CgkJZm9yICggdmFyIGg9 MDsgaCA8IGFyck5hdGl2ZVJldHVybi5sZW5ndGg7IGgrKyApIHsKCQkJaWYoIGFy ck5hdGl2ZVJldHVybltoXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gc3RyVGFn TmFtZS50b0xvd2VyQ2FzZSgpICkKCQkJCWFyclJldHVybkVsZW1lbnRzW2FyclJl dHVybkVsZW1lbnRzLmxlbmd0aF0gPSBhcnJOYXRpdmVSZXR1cm5baF07CgkJfQoJ CXJldHVybiBhcnJSZXR1cm5FbGVtZW50czsKCX0KCXZhciBhcnJFbGVtZW50cyA9 IChzdHJUYWdOYW1lID09ICIqIiAmJiBvRWxtLmFsbCk/IG9FbG0uYWxsIDogb0Vs bS5nZXRFbGVtZW50c0J5VGFnTmFtZShzdHJUYWdOYW1lKTsKCXZhciBhcnJSZWdF eHBDbGFzc05hbWVzID0gbmV3IEFycmF5KCk7CglpZih0eXBlb2Ygb0NsYXNzTmFt ZXMgPT0gIm9iamVjdCIpewoJCWZvcih2YXIgaT0wOyBpPG9DbGFzc05hbWVzLmxl bmd0aDsgaSsrKXsKCQkJYXJyUmVnRXhwQ2xhc3NOYW1lc1thcnJSZWdFeHBDbGFz c05hbWVzLmxlbmd0aF0gPQoJCQkJbmV3IFJlZ0V4cCgiKF58XFxzKSIgKyBvQ2xh c3NOYW1lc1tpXS5yZXBsYWNlKC9cLS9nLCAiXFwtIikgKyAiKFxcc3wkKSIpOwoJ CX0KCX0KCWVsc2V7CgkJYXJyUmVnRXhwQ2xhc3NOYW1lc1thcnJSZWdFeHBDbGFz c05hbWVzLmxlbmd0aF0gPQoJCQluZXcgUmVnRXhwKCIoXnxcXHMpIiArIG9DbGFz c05hbWVzLnJlcGxhY2UoL1wtL2csICJcXC0iKSArICIoXFxzfCQpIik7Cgl9Cgl2 YXIgb0VsZW1lbnQ7Cgl2YXIgYk1hdGNoZXNBbGw7Cglmb3IodmFyIGo9MDsgajxh cnJFbGVtZW50cy5sZW5ndGg7IGorKyl7CgkJb0VsZW1lbnQgPSBhcnJFbGVtZW50 c1tqXTsKCQliTWF0Y2hlc0FsbCA9IHRydWU7CgkJZm9yKHZhciBrPTA7IGs8YXJy UmVnRXhwQ2xhc3NOYW1lcy5sZW5ndGg7IGsrKyl7CgkJCWlmKCFhcnJSZWdFeHBD bGFzc05hbWVzW2tdLnRlc3Qob0VsZW1lbnQuY2xhc3NOYW1lKSl7CgkJCQliTWF0 Y2hlc0FsbCA9IGZhbHNlOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYoYk1hdGNo ZXNBbGwpewoJCQlhcnJSZXR1cm5FbGVtZW50c1thcnJSZXR1cm5FbGVtZW50cy5s ZW5ndGhdID0gb0VsZW1lbnQ7CgkJfQoJfQoJcmV0dXJuIChhcnJSZXR1cm5FbGVt ZW50cykKfQoKZnVuY3Rpb24gcmVkaXJlY3RUb0ZyYWdtZW50KGZyYWdtZW50KSB7 Cgl2YXIgbWF0Y2ggPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BcHBsZVdl YktpdFwvKFxkKykvKTsKCWlmIChtYXRjaCkgewoJCXZhciB3ZWJLaXRWZXJzaW9u ID0gcGFyc2VJbnQobWF0Y2hbMV0pOwoJCWlmICh3ZWJLaXRWZXJzaW9uIDwgNDIw KSB7CgkJCS8vIFJlbGVhc2VkIFNhZmFyaSB3LyBXZWJLaXQgNDE4LjkuMSBtZXNz ZXMgdXAgaG9ycmlibHkKCQkJLy8gTmlnaHRsaWVzIG9mIDQyMCsgYXJlIG9rCgkJ CXJldHVybjsKCQl9Cgl9CglpZiAoaXNfZ2Vja28pIHsKCQkvLyBNb3ppbGxhIG5l ZWRzIHRvIHdhaXQgdW50aWwgYWZ0ZXIgbG9hZCwgb3RoZXJ3aXNlIHRoZSB3aW5k b3cgZG9lc24ndCBzY3JvbGwKCQlhZGRPbmxvYWRIb29rKGZ1bmN0aW9uICgpIHsK CQkJaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoID09ICIiKQoJCQkJd2luZG93Lmxv Y2F0aW9uLmhhc2ggPSBmcmFnbWVudDsKCQl9KTsKCX0gZWxzZSB7CgkJaWYgKHdp bmRvdy5sb2NhdGlvbi5oYXNoID09ICIiKQoJCQl3aW5kb3cubG9jYXRpb24uaGFz aCA9IGZyYWdtZW50OwoJfQp9CgovKgogKiBUYWJsZSBzb3J0aW5nIHNjcmlwdCBi YXNlZCBvbiBvbmUgKGMpIDE5OTctMjAwNiBTdHVhcnQgTGFuZ3JpZGdlIGFuZCBK b29zdAogKiBkZSBWYWxrOgogKiBodHRwOi8vd3d3Lmpvb3N0ZGV2YWxrLm5sL2Nv ZGUvc29ydGFibGUtdGFibGUvCiAqIGh0dHA6Ly93d3cua3J5b2dlbml4Lm9yZy9j b2RlL2Jyb3dzZXIvc29ydHRhYmxlLwogKgogKiBAdG9kbyBkb24ndCBicmVhayBv biBjb2xzcGFucy9yb3dzcGFucyAoYnVnIDgwMjgpCiAqIEB0b2RvIGxhbmd1YWdl LXNwZWNpZmljIGRpZ2l0IGdyb3VwaW5nL2RlY2ltYWxzIChidWcgODA2MykKICog QHRvZG8gc3VwcG9ydCBhbGwgYWNjZXB0ZWQgZGF0ZSBmb3JtYXRzIChidWcgODIy NikKICovCgp2YXIgdHNfaW1hZ2VfcGF0aCA9IHN0eWxlcGF0aCsiL2NvbW1vbi9p bWFnZXMvIjsKdmFyIHRzX2ltYWdlX3VwID0gInNvcnRfdXAuZ2lmIjsKdmFyIHRz X2ltYWdlX2Rvd24gPSAic29ydF9kb3duLmdpZiI7CnZhciB0c19pbWFnZV9ub25l ID0gInNvcnRfbm9uZS5naWYiOwp2YXIgdHNfZXVyb3BlYW5kYXRlID0gd2dDb250 ZW50TGFuZ3VhZ2UgIT0gImVuIjsgLy8gVGhlIG5vbi1BbWVyaWNhbi1pbmNsaW5l ZCBjYW4gY2hhbmdlIHRvICJ0cnVlIgp2YXIgdHNfYWx0ZXJuYXRlX3Jvd19jb2xv cnMgPSBmYWxzZTsKdmFyIHRzX251bWJlcl90cmFuc2Zvcm1fdGFibGUgPSBudWxs Owp2YXIgdHNfbnVtYmVyX3JlZ2V4ID0gbnVsbDsKCmZ1bmN0aW9uIHNvcnRhYmxl c19pbml0KCkgewoJdmFyIGlkbnVtID0gMDsKCS8vIEZpbmQgYWxsIHRhYmxlcyB3 aXRoIGNsYXNzIHNvcnRhYmxlIGFuZCBtYWtlIHRoZW0gc29ydGFibGUKCXZhciB0 YWJsZXMgPSBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGRvY3VtZW50LCAidGFibGUi LCAic29ydGFibGUiKTsKCWZvciAodmFyIHRpID0gMDsgdGkgPCB0YWJsZXMubGVu Z3RoIDsgdGkrKykgewoJCWlmICghdGFibGVzW3RpXS5pZCkgewoJCQl0YWJsZXNb dGldLnNldEF0dHJpYnV0ZSgnaWQnLCdzb3J0YWJsZV90YWJsZV9pZF8nK2lkbnVt KTsKCQkJKytpZG51bTsKCQl9CgkJdHNfbWFrZVNvcnRhYmxlKHRhYmxlc1t0aV0p OwoJfQp9CgpmdW5jdGlvbiB0c19tYWtlU29ydGFibGUodGFibGUpIHsKCXZhciBm aXJzdFJvdzsKCWlmICh0YWJsZS5yb3dzICYmIHRhYmxlLnJvd3MubGVuZ3RoID4g MCkgewoJCWlmICh0YWJsZS50SGVhZCAmJiB0YWJsZS50SGVhZC5yb3dzLmxlbmd0 aCA+IDApIHsKCQkJZmlyc3RSb3cgPSB0YWJsZS50SGVhZC5yb3dzW3RhYmxlLnRI ZWFkLnJvd3MubGVuZ3RoLTFdOwoJCX0gZWxzZSB7CgkJCWZpcnN0Um93ID0gdGFi bGUucm93c1swXTsKCQl9Cgl9CglpZiAoIWZpcnN0Um93KSByZXR1cm47CgoJLy8g V2UgaGF2ZSBhIGZpcnN0IHJvdzogYXNzdW1lIGl0J3MgdGhlIGhlYWRlciwgYW5k IG1ha2UgaXRzIGNvbnRlbnRzIGNsaWNrYWJsZSBsaW5rcwoJZm9yICh2YXIgaSA9 IDA7IGkgPCBmaXJzdFJvdy5jZWxscy5sZW5ndGg7IGkrKykgewoJCXZhciBjZWxs ID0gZmlyc3RSb3cuY2VsbHNbaV07CgkJaWYgKCgiICIrY2VsbC5jbGFzc05hbWUr IiAiKS5pbmRleE9mKCIgdW5zb3J0YWJsZSAiKSA9PSAtMSkgewoJCQljZWxsLmlu bmVySFRNTCArPSAnJm5ic3A7Jm5ic3A7JwoJCQkJKyAnPGEgaHJlZj0iIyIgY2xh c3M9InNvcnRoZWFkZXIiICcKCQkJCSsgJ29uY2xpY2s9InRzX3Jlc29ydFRhYmxl KHRoaXMpO3JldHVybiBmYWxzZTsiPicKCQkJCSsgJzxzcGFuIGNsYXNzPSJzb3J0 YXJyb3ciPicKCQkJCSsgJzxpbWcgc3JjPSInCgkJCQkrIHRzX2ltYWdlX3BhdGgK CQkJCSsgdHNfaW1hZ2Vfbm9uZQoJCQkJKyAnIiBhbHQ9IiZkYXJyOyIvPjwvc3Bh bj48L2E+JzsKCQl9Cgl9CglpZiAodHNfYWx0ZXJuYXRlX3Jvd19jb2xvcnMpIHsK CQl0c19hbHRlcm5hdGUodGFibGUpOwoJfQp9CgpmdW5jdGlvbiB0c19nZXRJbm5l clRleHQoZWwpIHsKCXJldHVybiBnZXRJbm5lclRleHQoIGVsICk7Cn0KCmZ1bmN0 aW9uIHRzX3Jlc29ydFRhYmxlKGxuaykgewoJLy8gZ2V0IHRoZSBzcGFuCgl2YXIg c3BhbiA9IGxuay5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3BhbicpWzBdOwoKCXZh ciB0ZCA9IGxuay5wYXJlbnROb2RlOwoJdmFyIHRyID0gdGQucGFyZW50Tm9kZTsK CXZhciBjb2x1bW4gPSB0ZC5jZWxsSW5kZXg7CgoJdmFyIHRhYmxlID0gdHIucGFy ZW50Tm9kZTsKCXdoaWxlICh0YWJsZSAmJiAhKHRhYmxlLnRhZ05hbWUgJiYgdGFi bGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICd0YWJsZScpKQoJCXRhYmxlID0g dGFibGUucGFyZW50Tm9kZTsKCWlmICghdGFibGUpIHJldHVybjsKCglpZiAodGFi bGUucm93cy5sZW5ndGggPD0gMSkgcmV0dXJuOwoKCS8vIEdlbmVyYXRlIHRoZSBu dW1iZXIgdHJhbnNmb3JtIHRhYmxlIGlmIGl0J3Mgbm90IGRvbmUgYWxyZWFkeQoJ aWYgKHRzX251bWJlcl90cmFuc2Zvcm1fdGFibGUgPT0gbnVsbCkgewoJCXRzX2lu aXRUcmFuc2Zvcm1UYWJsZSgpOwoJfQoKCS8vIFdvcmsgb3V0IGEgdHlwZSBmb3Ig dGhlIGNvbHVtbgoJLy8gU2tpcCB0aGUgZmlyc3Qgcm93IGlmIHRoYXQncyB3aGVy ZSB0aGUgaGVhZGluZ3MgYXJlCgl2YXIgcm93U3RhcnQgPSAodGFibGUudEhlYWQg JiYgdGFibGUudEhlYWQucm93cy5sZW5ndGggPiAwID8gMCA6IDEpOwoKCXZhciBp dG0gPSAiIjsKCWZvciAodmFyIGkgPSByb3dTdGFydDsgaSA8IHRhYmxlLnJvd3Mu bGVuZ3RoOyBpKyspIHsKCQlpZiAodGFibGUucm93c1tpXS5jZWxscy5sZW5ndGgg PiBjb2x1bW4pIHsKCQkJaXRtID0gdHNfZ2V0SW5uZXJUZXh0KHRhYmxlLnJvd3Nb aV0uY2VsbHNbY29sdW1uXSk7CgkJCWl0bSA9IGl0bS5yZXBsYWNlKC9eW1xzXHhh MF0rLywgIiIpLnJlcGxhY2UoL1tcc1x4YTBdKyQvLCAiIik7CgkJCWlmIChpdG0g IT0gIiIpIGJyZWFrOwoJCX0KCX0KCgkvLyBUT0RPOiBidWcgODIyNiwgbG9jYWxp c2VkIGRhdGUgZm9ybWF0cwoJdmFyIHNvcnRmbiA9IHRzX3NvcnRfZ2VuZXJpYzsK CXZhciBwcmVwcm9jZXNzb3IgPSB0c190b0xvd2VyQ2FzZTsKCWlmICgvXlxkXGRb XC8uIC1dW2EtekEtWl17M31bXC8uIC1dXGRcZFxkXGQkLy50ZXN0KGl0bSkpIHsK CQlwcmVwcm9jZXNzb3IgPSB0c19kYXRlVG9Tb3J0S2V5OwoJfSBlbHNlIGlmICgv XlxkXGRbXC8uLV1cZFxkW1wvLi1dXGRcZFxkXGQkLy50ZXN0KGl0bSkpIHsKCQlw cmVwcm9jZXNzb3IgPSB0c19kYXRlVG9Tb3J0S2V5OwoJfSBlbHNlIGlmICgvXlxk XGRbXC8uLV1cZFxkW1wvLi1dXGRcZCQvLnRlc3QoaXRtKSkgewoJCXByZXByb2Nl c3NvciA9IHRzX2RhdGVUb1NvcnRLZXk7CgkvLyBwb3VuZCBkb2xsYXIgZXVybyB5 ZW4gY3VycmVuY3kgY2VudHMKCX0gZWxzZSBpZiAoLyheW1x1MDBhMyRcdTIwYWNc dTAwYTRcdTAwYTVdfFx1MDBhMiQpLy50ZXN0KGl0bSkpIHsKCQlwcmVwcm9jZXNz b3IgPSB0c19jdXJyZW5jeVRvU29ydEtleTsKCX0gZWxzZSBpZiAodHNfbnVtYmVy X3JlZ2V4LnRlc3QoaXRtKSkgewoJCXByZXByb2Nlc3NvciA9IHRzX3BhcnNlRmxv YXQ7Cgl9CgoJdmFyIHJldmVyc2UgPSAoc3Bhbi5nZXRBdHRyaWJ1dGUoInNvcnRk aXIiKSA9PSAnZG93bicpOwoKCXZhciBuZXdSb3dzID0gbmV3IEFycmF5KCk7Cgl2 YXIgc3RhdGljUm93cyA9IG5ldyBBcnJheSgpOwoJZm9yICh2YXIgaiA9IHJvd1N0 YXJ0OyBqIDwgdGFibGUucm93cy5sZW5ndGg7IGorKykgewoJCXZhciByb3cgPSB0 YWJsZS5yb3dzW2pdOwoJCWlmKCgiICIrcm93LmNsYXNzTmFtZSsiICIpLmluZGV4 T2YoIiB1bnNvcnRhYmxlICIpIDwgMCkgewoJCQl2YXIga2V5VGV4dCA9IHRzX2dl dElubmVyVGV4dChyb3cuY2VsbHNbY29sdW1uXSk7CgkJCWlmKGtleVRleHQgPT0g dW5kZWZpbmVkKSB7CgkJCQlrZXlUZXh0ID0gIiI7IAoJCQl9CgkJCXZhciBvbGRJ bmRleCA9IChyZXZlcnNlID8gLWogOiBqKTsKCQkJdmFyIHByZXByb2Nlc3NlZCA9 IHByZXByb2Nlc3Nvcigga2V5VGV4dC5yZXBsYWNlKC9eW1xzXHhhMF0rLywgIiIp LnJlcGxhY2UoL1tcc1x4YTBdKyQvLCAiIikgKTsKCgkJCW5ld1Jvd3NbbmV3Um93 cy5sZW5ndGhdID0gbmV3IEFycmF5KHJvdywgcHJlcHJvY2Vzc2VkLCBvbGRJbmRl eCk7CgkJfSBlbHNlIHN0YXRpY1Jvd3Nbc3RhdGljUm93cy5sZW5ndGhdID0gbmV3 IEFycmF5KHJvdywgZmFsc2UsIGotcm93U3RhcnQpOwoJfQoKCW5ld1Jvd3Muc29y dChzb3J0Zm4pOwoKCXZhciBhcnJvd0hUTUw7CglpZiAocmV2ZXJzZSkgewoJCWFy cm93SFRNTCA9ICc8aW1nIHNyYz0iJysgdHNfaW1hZ2VfcGF0aCArIHRzX2ltYWdl X2Rvd24gKyAnIiBhbHQ9IiZkYXJyOyIvPic7CgkJbmV3Um93cy5yZXZlcnNlKCk7 CgkJc3Bhbi5zZXRBdHRyaWJ1dGUoJ3NvcnRkaXInLCd1cCcpOwoJfSBlbHNlIHsK CQlhcnJvd0hUTUwgPSAnPGltZyBzcmM9IicrIHRzX2ltYWdlX3BhdGggKyB0c19p bWFnZV91cCArICciIGFsdD0iJnVhcnI7Ii8+JzsKCQlzcGFuLnNldEF0dHJpYnV0 ZSgnc29ydGRpcicsJ2Rvd24nKTsKCX0KCglmb3IgKHZhciBpID0gMDsgaSA8IHN0 YXRpY1Jvd3MubGVuZ3RoOyBpKyspIHsKCQl2YXIgcm93ID0gc3RhdGljUm93c1tp XTsKCQluZXdSb3dzLnNwbGljZShyb3dbMl0sIDAsIHJvdyk7Cgl9CgoJLy8gV2Ug YXBwZW5kQ2hpbGQgcm93cyB0aGF0IGFscmVhZHkgZXhpc3QgdG8gdGhlIHRib2R5 LCBzbyBpdCBtb3ZlcyB0aGVtIHJhdGhlciB0aGFuIGNyZWF0aW5nIG5ldyBvbmVz CgkvLyBkb24ndCBkbyBzb3J0Ym90dG9tIHJvd3MKCWZvciAodmFyIGkgPSAwOyBp IDwgbmV3Um93cy5sZW5ndGg7IGkrKykgewoJCWlmICgoIiAiK25ld1Jvd3NbaV1b MF0uY2xhc3NOYW1lKyIgIikuaW5kZXhPZigiIHNvcnRib3R0b20gIikgPT0gLTEp CgkJCXRhYmxlLnRCb2RpZXNbMF0uYXBwZW5kQ2hpbGQobmV3Um93c1tpXVswXSk7 Cgl9CgkvLyBkbyBzb3J0Ym90dG9tIHJvd3Mgb25seQoJZm9yICh2YXIgaSA9IDA7 IGkgPCBuZXdSb3dzLmxlbmd0aDsgaSsrKSB7CgkJaWYgKCgiICIrbmV3Um93c1tp XVswXS5jbGFzc05hbWUrIiAiKS5pbmRleE9mKCIgc29ydGJvdHRvbSAiKSAhPSAt MSkKCQkJdGFibGUudEJvZGllc1swXS5hcHBlbmRDaGlsZChuZXdSb3dzW2ldWzBd KTsKCX0KCgkvLyBEZWxldGUgYW55IG90aGVyIGFycm93cyB0aGVyZSBtYXkgYmUg c2hvd2luZwoJdmFyIHNwYW5zID0gZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0ciwg InNwYW4iLCAic29ydGFycm93Iik7Cglmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5z Lmxlbmd0aDsgaSsrKSB7CgkJc3BhbnNbaV0uaW5uZXJIVE1MID0gJzxpbWcgc3Jj PSInKyB0c19pbWFnZV9wYXRoICsgdHNfaW1hZ2Vfbm9uZSArICciIGFsdD0iJmRh cnI7Ii8+JzsKCX0KCXNwYW4uaW5uZXJIVE1MID0gYXJyb3dIVE1MOwoKCWlmICh0 c19hbHRlcm5hdGVfcm93X2NvbG9ycykgewoJCXRzX2FsdGVybmF0ZSh0YWJsZSk7 Cgl9Cn0KCmZ1bmN0aW9uIHRzX2luaXRUcmFuc2Zvcm1UYWJsZSgpIHsKCWlmICgg dHlwZW9mIHdnU2VwYXJhdG9yVHJhbnNmb3JtVGFibGUgPT0gInVuZGVmaW5lZCIK CQkJfHwgKCB3Z1NlcGFyYXRvclRyYW5zZm9ybVRhYmxlWzBdID09ICcnICYmIHdn RGlnaXRUcmFuc2Zvcm1UYWJsZVsyXSA9PSAnJyApICkKCXsKCQlkaWdpdENsYXNz ID0gIlswLTksLl0iOwoJCXRzX251bWJlcl90cmFuc2Zvcm1fdGFibGUgPSBmYWxz ZTsKCX0gZWxzZSB7CgkJdHNfbnVtYmVyX3RyYW5zZm9ybV90YWJsZSA9IHt9OwoJ CS8vIFVucGFjayB0aGUgdHJhbnNmb3JtIHRhYmxlCgkJLy8gU2VwYXJhdG9ycwoJ CWFzY2lpID0gd2dTZXBhcmF0b3JUcmFuc2Zvcm1UYWJsZVswXS5zcGxpdCgiXHQi KTsKCQlsb2NhbGlzZWQgPSB3Z1NlcGFyYXRvclRyYW5zZm9ybVRhYmxlWzFdLnNw bGl0KCJcdCIpOwoJCWZvciAoIHZhciBpID0gMDsgaSA8IGFzY2lpLmxlbmd0aDsg aSsrICkgewoJCQl0c19udW1iZXJfdHJhbnNmb3JtX3RhYmxlW2xvY2FsaXNlZFtp XV0gPSBhc2NpaVtpXTsKCQl9CgkJLy8gRGlnaXRzCgkJYXNjaWkgPSB3Z0RpZ2l0 VHJhbnNmb3JtVGFibGVbMF0uc3BsaXQoIlx0Iik7CgkJbG9jYWxpc2VkID0gd2dE aWdpdFRyYW5zZm9ybVRhYmxlWzFdLnNwbGl0KCJcdCIpOwoJCWZvciAoIHZhciBp ID0gMDsgaSA8IGFzY2lpLmxlbmd0aDsgaSsrICkgewoJCQl0c19udW1iZXJfdHJh bnNmb3JtX3RhYmxlW2xvY2FsaXNlZFtpXV0gPSBhc2NpaVtpXTsKCQl9CgoJCS8v IENvbnN0cnVjdCByZWdleCBmb3IgbnVtYmVyIGlkZW50aWZpY2F0aW9uCgkJZGln aXRzID0gWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAn OCcsICc5JywgJywnLCAnXFwuJ107CgkJbWF4RGlnaXRMZW5ndGggPSAxOwoJCWZv ciAoIHZhciBkaWdpdCBpbiB0c19udW1iZXJfdHJhbnNmb3JtX3RhYmxlICkgewoJ CQkvLyBFc2NhcGUgcmVnZXggbWV0YWNoYXJhY3RlcnMKCQkJZGlnaXRzLnB1c2go CgkJCQlkaWdpdC5yZXBsYWNlKCAvW1xcXFwkXCpcK1w/XC5cKFwpXHxce1x9XFtc XVwtXS8sCgkJCQkJZnVuY3Rpb24oIHMgKSB7IHJldHVybiAnXFwnICsgczsgfSAp CgkJCSk7CgkJCWlmIChkaWdpdC5sZW5ndGggPiBtYXhEaWdpdExlbmd0aCkgewoJ CQkJbWF4RGlnaXRMZW5ndGggPSBkaWdpdC5sZW5ndGg7CgkJCX0KCQl9CgkJaWYg KCBtYXhEaWdpdExlbmd0aCA+IDEgKSB7CgkJCWRpZ2l0Q2xhc3MgPSAnWycgKyBk aWdpdHMuam9pbiggJycsIGRpZ2l0cyApICsgJ10nOwoJCX0gZWxzZSB7CgkJCWRp Z2l0Q2xhc3MgPSAnKCcgKyBkaWdpdHMuam9pbiggJ3wnLCBkaWdpdHMgKSArICcp JzsKCQl9Cgl9CgoJLy8gV2UgYWxsb3cgYSB0cmFpbGluZyBwZXJjZW50IHNpZ24s IHdoaWNoIHdlIGp1c3Qgc3RyaXAuICBUaGlzIHdvcmtzIGZpbmUKCS8vIGlmIHBl cmNlbnRzIGFuZCByZWd1bGFyIG51bWJlcnMgYXJlbid0IGJlaW5nIG1peGVkLgoJ dHNfbnVtYmVyX3JlZ2V4ID0gbmV3IFJlZ0V4cCgKCQkiXigiICsKCQkJIlsrLV0/ WzAtOV1bMC05LF0qKFxcLlswLTksXSopPyhFWystXT9bMC05XVswLTksXSopPyIg KyAvLyBGb3J0cmFuLXN0eWxlIHNjaWVudGlmaWMKCQkJInwiICsKCQkJIlsrLV0/ IiArIGRpZ2l0Q2xhc3MgKyAiKyU/IiArIC8vIEdlbmVyaWMgbG9jYWxpc2VkCgkJ IikkIiwgImkiCgkpOwp9CgpmdW5jdGlvbiB0c190b0xvd2VyQ2FzZSggcyApIHsK CXJldHVybiBzLnRvTG93ZXJDYXNlKCk7Cn0KCmZ1bmN0aW9uIHRzX2RhdGVUb1Nv cnRLZXkoZGF0ZSkgewoJLy8geTJrIG5vdGVzOiB0d28gZGlnaXQgeWVhcnMgbGVz cyB0aGFuIDUwIGFyZSB0cmVhdGVkIGFzIDIwWFgsIGdyZWF0ZXIgdGhhbiA1MCBh cmUgdHJlYXRlZCBhcyAxOVhYCglpZiAoZGF0ZS5sZW5ndGggPT0gMTEpIHsKCQlz d2l0Y2ggKGRhdGUuc3Vic3RyKDMsMykudG9Mb3dlckNhc2UoKSkgewoJCQljYXNl ICJqYW4iOiB2YXIgbW9udGggPSAiMDEiOyBicmVhazsKCQkJY2FzZSAiZmViIjog dmFyIG1vbnRoID0gIjAyIjsgYnJlYWs7CgkJCWNhc2UgIm1hciI6IHZhciBtb250 aCA9ICIwMyI7IGJyZWFrOwoJCQljYXNlICJhcHIiOiB2YXIgbW9udGggPSAiMDQi OyBicmVhazsKCQkJY2FzZSAibWF5IjogdmFyIG1vbnRoID0gIjA1IjsgYnJlYWs7 CgkJCWNhc2UgImp1biI6IHZhciBtb250aCA9ICIwNiI7IGJyZWFrOwoJCQljYXNl ICJqdWwiOiB2YXIgbW9udGggPSAiMDciOyBicmVhazsKCQkJY2FzZSAiYXVnIjog dmFyIG1vbnRoID0gIjA4IjsgYnJlYWs7CgkJCWNhc2UgInNlcCI6IHZhciBtb250 aCA9ICIwOSI7IGJyZWFrOwoJCQljYXNlICJvY3QiOiB2YXIgbW9udGggPSAiMTAi OyBicmVhazsKCQkJY2FzZSAibm92IjogdmFyIG1vbnRoID0gIjExIjsgYnJlYWs7 CgkJCWNhc2UgImRlYyI6IHZhciBtb250aCA9ICIxMiI7IGJyZWFrOwoJCQkvLyBk ZWZhdWx0OiB2YXIgbW9udGggPSAiMDAiOwoJCX0KCQlyZXR1cm4gZGF0ZS5zdWJz dHIoNyw0KSttb250aCtkYXRlLnN1YnN0cigwLDIpOwoJfSBlbHNlIGlmIChkYXRl Lmxlbmd0aCA9PSAxMCkgewoJCWlmICh0c19ldXJvcGVhbmRhdGUgPT0gZmFsc2Up IHsKCQkJcmV0dXJuIGRhdGUuc3Vic3RyKDYsNCkrZGF0ZS5zdWJzdHIoMCwyKStk YXRlLnN1YnN0cigzLDIpOwoJCX0gZWxzZSB7CgkJCXJldHVybiBkYXRlLnN1YnN0 cig2LDQpK2RhdGUuc3Vic3RyKDMsMikrZGF0ZS5zdWJzdHIoMCwyKTsKCQl9Cgl9 IGVsc2UgaWYgKGRhdGUubGVuZ3RoID09IDgpIHsKCQl5ciA9IGRhdGUuc3Vic3Ry KDYsMik7CgkJaWYgKHBhcnNlSW50KHlyKSA8IDUwKSB7CgkJCXlyID0gJzIwJyt5 cjsKCQl9IGVsc2UgewoJCQl5ciA9ICcxOScreXI7CgkJfQoJCWlmICh0c19ldXJv cGVhbmRhdGUgPT0gdHJ1ZSkgewoJCQlyZXR1cm4geXIrZGF0ZS5zdWJzdHIoMywy KStkYXRlLnN1YnN0cigwLDIpOwoJCX0gZWxzZSB7CgkJCXJldHVybiB5citkYXRl LnN1YnN0cigwLDIpK2RhdGUuc3Vic3RyKDMsMik7CgkJfQoJfQoJcmV0dXJuICIw MDAwMDAwMCI7Cn0KCmZ1bmN0aW9uIHRzX3BhcnNlRmxvYXQoIHMgKSB7CglpZiAo ICFzICkgewoJCXJldHVybiAwOwoJfQoJaWYgKHRzX251bWJlcl90cmFuc2Zvcm1f dGFibGUgIT0gZmFsc2UpIHsKCQl2YXIgbmV3TnVtID0gJycsIGM7CgoJCWZvciAo IHZhciBwID0gMDsgcCA8IHMubGVuZ3RoOyBwKysgKSB7CgkJCWMgPSBzLmNoYXJB dCggcCApOwoJCQlpZiAoYyBpbiB0c19udW1iZXJfdHJhbnNmb3JtX3RhYmxlKSB7 CgkJCQluZXdOdW0gKz0gdHNfbnVtYmVyX3RyYW5zZm9ybV90YWJsZVtjXTsKCQkJ fSBlbHNlIHsKCQkJCW5ld051bSArPSBjOwoJCQl9CgkJfQoJCXMgPSBuZXdOdW07 Cgl9CgoJbnVtID0gcGFyc2VGbG9hdChzLnJlcGxhY2UoLywvZywgIiIpKTsKCXJl dHVybiAoaXNOYU4obnVtKSA/IDAgOiBudW0pOwp9CgpmdW5jdGlvbiB0c19jdXJy ZW5jeVRvU29ydEtleSggcyApIHsKCXJldHVybiB0c19wYXJzZUZsb2F0KHMucmVw bGFjZSgvW14wLTkuLF0vZywnJykpOwp9CgpmdW5jdGlvbiB0c19zb3J0X2dlbmVy aWMoYSwgYikgewoJcmV0dXJuIGFbMV0gPCBiWzFdID8gLTEgOiBhWzFdID4gYlsx XSA/IDEgOiBhWzJdIC0gYlsyXTsKfQoKZnVuY3Rpb24gdHNfYWx0ZXJuYXRlKHRh YmxlKSB7CgkvLyBUYWtlIG9iamVjdCB0YWJsZSBhbmQgZ2V0IGFsbCBpdCdzIHRi b2RpZXMuCgl2YXIgdGFibGVCb2RpZXMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFn TmFtZSgidGJvZHkiKTsKCS8vIExvb3AgdGhyb3VnaCB0aGVzZSB0Ym9kaWVzCglm b3IgKHZhciBpID0gMDsgaSA8IHRhYmxlQm9kaWVzLmxlbmd0aDsgaSsrKSB7CgkJ Ly8gVGFrZSB0aGUgdGJvZHksIGFuZCBnZXQgYWxsIGl0J3Mgcm93cwoJCXZhciB0 YWJsZVJvd3MgPSB0YWJsZUJvZGllc1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgi dHIiKTsKCQkvLyBMb29wIHRocm91Z2ggdGhlc2Ugcm93cwoJCS8vIFN0YXJ0IGF0 IDEgYmVjYXVzZSB3ZSB3YW50IHRvIGxlYXZlIHRoZSBoZWFkaW5nIHJvdyB1bnRv dWNoZWQKCQlmb3IgKHZhciBqID0gMDsgaiA8IHRhYmxlUm93cy5sZW5ndGg7IGor KykgewoJCQkvLyBDaGVjayBpZiBqIGlzIGV2ZW4sIGFuZCBhcHBseSBjbGFzc2Vz IGZvciBib3RoIHBvc3NpYmxlIHJlc3VsdHMKCQkJdmFyIG9sZENsYXNzZXMgPSB0 YWJsZVJvd3Nbal0uY2xhc3NOYW1lLnNwbGl0KCIgIik7CgkJCXZhciBuZXdDbGFz c05hbWUgPSAiIjsKCQkJZm9yICh2YXIgayA9IDA7IGsgPCBvbGRDbGFzc2VzLmxl bmd0aDsgaysrKSB7CgkJCQlpZiAob2xkQ2xhc3Nlc1trXSAhPSAiIiAmJiBvbGRD bGFzc2VzW2tdICE9ICJldmVuIiAmJiBvbGRDbGFzc2VzW2tdICE9ICJvZGQiKQoJ CQkJCW5ld0NsYXNzTmFtZSArPSBvbGRDbGFzc2VzW2tdICsgIiAiOwoJCQl9CgkJ CXRhYmxlUm93c1tqXS5jbGFzc05hbWUgPSBuZXdDbGFzc05hbWUgKyAoaiAlIDIg PT0gMCA/ICJldmVuIiA6ICJvZGQiKTsKCQl9Cgl9Cn0KCi8qCiAqIEVuZCBvZiB0 YWJsZSBzb3J0aW5nIGNvZGUKICovCgoKLyoqCiAqIEFkZCBhIGN1dGUgbGl0dGxl IGJveCBhdCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4gdG8gaW5mb3JtIHRoZSB1c2Vy IG9mCiAqIHNvbWV0aGluZywgcmVwbGFjaW5nIGFueSBwcmVleGlzdGluZyBtZXNz YWdlLgogKgogKiBAcGFyYW0gU3RyaW5nIC1vci0gRG9tIE9iamVjdCBtZXNzYWdl IEhUTUwgdG8gYmUgcHV0IGluc2lkZSB0aGUgcmlnaHQgZGl2CiAqIEBwYXJhbSBT dHJpbmcgY2xhc3NOYW1lICAgVXNlZCBpbiBhZGRpbmcgYSBjbGFzczsgc2hvdWxk IGJlIGRpZmZlcmVudCBmb3IgZWFjaAogKiAgIGNhbGwgdG8gYWxsb3cgQ1NTL0pT IHRvIGhpZGUgZGlmZmVyZW50IGJveGVzLiAgbnVsbCA9IG5vIGNsYXNzIHVzZWQu CiAqIEByZXR1cm4gQm9vbGVhbiAgICAgICBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNl IG9uIGZhaWx1cmUKICovCmZ1bmN0aW9uIGpzTXNnKCBtZXNzYWdlLCBjbGFzc05h bWUgKSB7CglpZiAoICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCApIHsKCQlyZXR1 cm4gZmFsc2U7Cgl9CgkvLyBXZSBzcGVjaWFsLWNhc2Ugc2tpbiBzdHJ1Y3R1cmVz IHByb3ZpZGVkIGJ5IHRoZSBzb2Z0d2FyZS4gIFNraW5zIHRoYXQKCS8vIGNob29z ZSB0byBhYmFuZG9uIG9yIHNpZ25pZmljYW50bHkgbW9kaWZ5IG91ciBmb3JtYXR0 aW5nIGNhbiBqdXN0IGRlZmluZQoJLy8gYW4gbXctanMtbWVzc2FnZSBkaXYgdG8g c3RhcnQgd2l0aC4KCXZhciBtZXNzYWdlRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoICdtdy1qcy1tZXNzYWdlJyApOwoJaWYgKCAhbWVzc2FnZURpdiApIHsK CQltZXNzYWdlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTsK CQlpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnY29sdW1uLWNvbnRlbnQn ICkKCQkmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2NvbnRlbnQnICkgKSB7 CgkJCS8vIE1vbm9Cb29rLCBwcmVzdW1hYmx5CgkJCWRvY3VtZW50LmdldEVsZW1l bnRCeUlkKCAnY29udGVudCcgKS5pbnNlcnRCZWZvcmUoCgkJCQltZXNzYWdlRGl2 LAoJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdjb250ZW50JyApLmZpcnN0 Q2hpbGQKCQkJKTsKCQl9IGVsc2UgaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgnY29udGVudCcpCgkJJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdhcnRp Y2xlJyApICkgewoJCQkvLyBOb24tTW9ub2Jvb2sgYnV0IHN0aWxsIHJlY29nbml6 YWJsZSAob2xkLXN0eWxlKQoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2Fy dGljbGUnKS5pbnNlcnRCZWZvcmUoCgkJCQltZXNzYWdlRGl2LAoJCQkJZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoICdhcnRpY2xlJyApLmZpcnN0Q2hpbGQKCQkJKTsK CQl9IGVsc2UgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoKCW1lc3NhZ2VEaXYu c2V0QXR0cmlidXRlKCAnaWQnLCAnbXctanMtbWVzc2FnZScgKTsKCW1lc3NhZ2VE aXYuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CglpZiggY2xhc3NOYW1lICkgewoJ CW1lc3NhZ2VEaXYuc2V0QXR0cmlidXRlKCAnY2xhc3MnLCAnbXctanMtbWVzc2Fn ZS0nK2NsYXNzTmFtZSApOwoJfQoKCWlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ29i amVjdCcpIHsKCQl3aGlsZSAobWVzc2FnZURpdi5oYXNDaGlsZE5vZGVzKCkpIC8v IFJlbW92ZSBvbGQgY29udGVudAoJCQltZXNzYWdlRGl2LnJlbW92ZUNoaWxkKG1l c3NhZ2VEaXYuZmlyc3RDaGlsZCk7CgkJbWVzc2FnZURpdi5hcHBlbmRDaGlsZCAo bWVzc2FnZSk7IC8vIEFwcGVuZCBuZXcgY29udGVudAoJfQoJZWxzZSB7CgkJbWVz c2FnZURpdi5pbm5lckhUTUwgPSBtZXNzYWdlOwoJfQoJcmV0dXJuIHRydWU7Cn0K Ci8qKgogKiBJbmplY3QgYSBjdXRlIGxpdHRsZSBwcm9ncmVzcyBzcGlubmVyIGFm dGVyIHRoZSBzcGVjaWZpZWQgZWxlbWVudAogKgogKiBAcGFyYW0gZWxlbWVudCBF bGVtZW50IHRvIGluamVjdCBhZnRlcgogKiBAcGFyYW0gaWQgSWRlbnRpZmllciBz dHJpbmcgKGZvciB1c2Ugd2l0aCByZW1vdmVTcGlubmVyKCksIGJlbG93KQogKi8K ZnVuY3Rpb24gaW5qZWN0U3Bpbm5lciggZWxlbWVudCwgaWQgKSB7Cgl2YXIgc3Bp bm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbWciICk7CglzcGlubmVy LmlkID0gIm13LXNwaW5uZXItIiArIGlkOwoJc3Bpbm5lci5zcmMgPSBzdHlsZXBh dGggKyAiL2NvbW1vbi9pbWFnZXMvc3Bpbm5lci5naWYiOwoJc3Bpbm5lci5hbHQg PSBzcGlubmVyLnRpdGxlID0gIi4uLiI7CglpZiggZWxlbWVudC5uZXh0U2libGlu ZyApIHsKCQllbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBzcGlubmVy LCBlbGVtZW50Lm5leHRTaWJsaW5nICk7Cgl9IGVsc2UgewoJCWVsZW1lbnQucGFy ZW50Tm9kZS5hcHBlbmRDaGlsZCggc3Bpbm5lciApOwoJfQp9CgovKioKICogUmVt b3ZlIGEgcHJvZ3Jlc3Mgc3Bpbm5lciBhZGRlZCB3aXRoIGluamVjdFNwaW5uZXIo KQogKgogKiBAcGFyYW0gaWQgSWRlbnRpZmllciBzdHJpbmcKICovCmZ1bmN0aW9u IHJlbW92ZVNwaW5uZXIoIGlkICkgewoJdmFyIHNwaW5uZXIgPSBkb2N1bWVudC5n ZXRFbGVtZW50QnlJZCggIm13LXNwaW5uZXItIiArIGlkICk7CglpZiggc3Bpbm5l ciApIHsKCQlzcGlubmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNwaW5uZXIg KTsKCX0KfQoKZnVuY3Rpb24gcnVuT25sb2FkSG9vaygpIHsKCS8vIGRvbid0IHJ1 biBhbnl0aGluZyBiZWxvdyB0aGlzIGZvciBub24tZG9tIGJyb3dzZXJzCglpZiAo ZG9uZU9ubG9hZEhvb2sgfHwgIShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAmJiBk b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSkpIHsKCQlyZXR1cm47Cgl9CgoJ Ly8gc2V0IHRoaXMgYmVmb3JlIHJ1bm5pbmcgYW55IGhvb2tzLCBzaW5jZSBhbnkg ZXJyb3JzIGJlbG93CgkvLyBtaWdodCBjYXVzZSB0aGUgZnVuY3Rpb24gdG8gdGVy bWluYXRlIHByZW1hdHVyZWx5Cglkb25lT25sb2FkSG9vayA9IHRydWU7CgoJdXBk YXRlVG9vbHRpcEFjY2Vzc0tleXMoIG51bGwgKTsKCWFrZXl0dCggbnVsbCApOwoJ c2V0dXBDaGVja2JveFNoaWZ0Q2xpY2soKTsKCXNvcnRhYmxlc19pbml0KCk7CgoJ Ly8gUnVuIGFueSBhZGRlZC1vbiBmdW5jdGlvbnMKCWZvciAodmFyIGkgPSAwOyBp IDwgb25sb2FkRnVuY3RzLmxlbmd0aDsgaSsrKSB7CgkJb25sb2FkRnVuY3RzW2ld KCk7Cgl9Cn0KCi8qKgogKiBBZGQgYW4gZXZlbnQgaGFuZGxlciB0byBhbiBlbGVt ZW50CiAqCiAqIEBwYXJhbSBFbGVtZW50IGVsZW1lbnQgRWxlbWVudCB0byBhZGQg aGFuZGxlciB0bwogKiBAcGFyYW0gU3RyaW5nIGF0dGFjaCBFdmVudCB0byBhdHRh Y2ggdG8KICogQHBhcmFtIGNhbGxhYmxlIGhhbmRsZXIgRXZlbnQgaGFuZGxlciBj YWxsYmFjawogKi8KZnVuY3Rpb24gYWRkSGFuZGxlciggZWxlbWVudCwgYXR0YWNo LCBoYW5kbGVyICkgewoJaWYoIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyICkgewoJ CWVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggYXR0YWNoLCBoYW5kbGVyLCBmYWxz ZSApOwoJfSBlbHNlIGlmKCB3aW5kb3cuYXR0YWNoRXZlbnQgKSB7CgkJZWxlbWVu dC5hdHRhY2hFdmVudCggJ29uJyArIGF0dGFjaCwgaGFuZGxlciApOwoJfQp9Cgov KioKICogQWRkIGEgY2xpY2sgZXZlbnQgaGFuZGxlciB0byBhbiBlbGVtZW50CiAq CiAqIEBwYXJhbSBFbGVtZW50IGVsZW1lbnQgRWxlbWVudCB0byBhZGQgaGFuZGxl ciB0bwogKiBAcGFyYW0gY2FsbGFibGUgaGFuZGxlciBFdmVudCBoYW5kbGVyIGNh bGxiYWNrCiAqLwpmdW5jdGlvbiBhZGRDbGlja0hhbmRsZXIoIGVsZW1lbnQsIGhh bmRsZXIgKSB7CglhZGRIYW5kbGVyKCBlbGVtZW50LCAnY2xpY2snLCBoYW5kbGVy ICk7Cn0KCi8qKgogKiBSZW1vdmVzIGFuIGV2ZW50IGhhbmRsZXIgZnJvbSBhbiBl bGVtZW50CiAqCiAqIEBwYXJhbSBFbGVtZW50IGVsZW1lbnQgRWxlbWVudCB0byBy ZW1vdmUgaGFuZGxlciBmcm9tCiAqIEBwYXJhbSBTdHJpbmcgcmVtb3ZlIEV2ZW50 IHRvIHJlbW92ZQogKiBAcGFyYW0gY2FsbGFibGUgaGFuZGxlciBFdmVudCBoYW5k bGVyIGNhbGxiYWNrIHRvIHJlbW92ZQogKi8KZnVuY3Rpb24gcmVtb3ZlSGFuZGxl ciggZWxlbWVudCwgcmVtb3ZlLCBoYW5kbGVyICkgewoJaWYoIHdpbmRvdy5yZW1v dmVFdmVudExpc3RlbmVyICkgewoJCWVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5l ciggcmVtb3ZlLCBoYW5kbGVyLCBmYWxzZSApOwoJfSBlbHNlIGlmKCB3aW5kb3cu ZGV0YWNoRXZlbnQgKSB7CgkJZWxlbWVudC5kZXRhY2hFdmVudCggJ29uJyArIHJl bW92ZSwgaGFuZGxlciApOwoJfQp9Ci8vbm90ZTogYWxsIHNraW5zIHNob3VsZCBj YWxsIHJ1bk9ubG9hZEhvb2soKSBhdCB0aGUgZW5kIG9mIGh0bWwgb3V0cHV0LAov LyAgICAgIHNvIHRoZSBiZWxvdyBzaG91bGQgYmUgcmVkdW5kYW50LiBJdCdzIHRo ZXJlIGp1c3QgaW4gY2FzZS4KaG9va0V2ZW50KCJsb2FkIiwgcnVuT25sb2FkSG9v ayk7CgovLyBGb3IgZnV0dXJlIHVzZS4KbXcgPSB7fTsKCgo= ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=ajax.js Content-Type: application/x-javascript; name=ajax.js Content-Location: http://bits.wikimedia.org/skins-1.5/common/ajax.js?urid=257z26 Content-Transfer-Encoding: Base64 Ly8gcmVtb3RlIHNjcmlwdGluZyBsaWJyYXJ5Ci8vIChjKSBjb3B5cmlnaHQgMjAw NSBtb2Rlcm5tZXRob2QsIGluYwp2YXIgc2FqYXhfZGVidWdfbW9kZSA9IGZhbHNl Owp2YXIgc2FqYXhfcmVxdWVzdF90eXBlID0gIkdFVCI7CgovKioKKiBpZiBzYWph eF9kZWJ1Z19tb2RlIGlzIHRydWUsIHRoaXMgZnVuY3Rpb24gb3V0cHV0cyBnaXZl biB0aGUgbWVzc2FnZSBpbnRvIAoqIHRoZSBlbGVtZW50IHdpdGggaWQgPSBzYWph eF9kZWJ1ZzsgaWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cyBpbiB0aGUgZG9jdW1l bnQsIAoqIGl0IGlzIGluamVjdGVkLgoqLwpmdW5jdGlvbiBzYWpheF9kZWJ1Zyh0 ZXh0KSB7CglpZiAoIXNhamF4X2RlYnVnX21vZGUpIHJldHVybiBmYWxzZTsKCgl2 YXIgZT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhamF4X2RlYnVnJyk7CgoJ aWYgKCFlKSB7CgkJZT0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwoJCWUu Y2xhc3NOYW1lPSAnc2FqYXhfZGVidWcnOwoJCWUuaWQ9ICdzYWpheF9kZWJ1Zyc7 CgoJCXZhciBiPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIp WzBdOwoKCQlpZiAoYi5maXJzdENoaWxkKSBiLmluc2VydEJlZm9yZShlLCBiLmZp cnN0Q2hpbGQpOwoJCWVsc2UgYi5hcHBlbmRDaGlsZChlKTsKCX0KCgl2YXIgbT0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgltLmFwcGVuZENoaWxkKCBk b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggdGV4dCApICk7CgoJZS5hcHBlbmRDaGls ZCggbSApOwoKCXJldHVybiB0cnVlOwp9CgovKioKKiBjb21wYXRpYmlsaXR5IHdy YXBwZXIgZm9yIGNyZWF0aW5nIGEgbmV3IFhNTEh0dHBSZXF1ZXN0IG9iamVjdC4K Ki8KZnVuY3Rpb24gc2FqYXhfaW5pdF9vYmplY3QoKSB7CglzYWpheF9kZWJ1Zygi c2FqYXhfaW5pdF9vYmplY3QoKSBjYWxsZWQuLiIpCgl2YXIgQTsKCXRyeSB7CgkJ Ly8gVHJ5IHRoZSBuZXcgc3R5bGUgYmVmb3JlIEFjdGl2ZVggc28gd2UgZG9uJ3QK CQkvLyB1bm5lY2Vzc2FyaWx5IHRyaWdnZXIgd2FybmluZ3MgaW4gSUUgNyB3aGVu CgkJLy8gc2V0IHRvIHByb21wdCBhYm91dCBBY3RpdmVYIHVzYWdlCgkJQSA9IG5l dyBYTUxIdHRwUmVxdWVzdCgpOwoJfSBjYXRjaCAoZSkgewoJCXRyeSB7CgkJCUE9 bmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7CgkJfSBjYXRjaCAo ZSkgewoJCQl0cnkgewoJCQkJQT1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0 LlhNTEhUVFAiKTsKCQkJfSBjYXRjaCAob2MpIHsKCQkJCUE9bnVsbDsKCQkJfQoJ CX0KCX0KCWlmICghQSkKCQlzYWpheF9kZWJ1ZygiQ291bGQgbm90IGNyZWF0ZSBj b25uZWN0aW9uIG9iamVjdC4iKTsKCglyZXR1cm4gQTsKfQoKLyoqCiogUGVyZm9y bSBhbiBhamF4IGNhbGwgdG8gbWVkaWF3aWtpLiBDYWxscyBhcmUgaGFuZGVsZWQg YnkgQWpheERpc3BhdGNoZXIucGhwCiogICBmdW5jX25hbWUgLSB0aGUgbmFtZSBv ZiB0aGUgZnVuY3Rpb24gdG8gY2FsbC4gTXVzdCBiZSByZWdpc3RlcmVkIGluICR3 Z0FqYXhFeHBvcnRMaXN0CiogICBhcmdzIC0gYW4gYXJyYXkgb2YgYXJndW1lbnRz IHRvIHRoYXQgZnVuY3Rpb24KKiAgIHRhcmdldCAtIHRoZSB0YXJnZXQgdGhhdCB3 aWxsIGhhbmRsZSB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsLiBJZiB0aGlzIGlzIGEg ZnVuY3Rpb24sCiogICAgICAgICAgICBpZiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRo ZSBYTUxIdHRwUmVxdWVzdCBhcyBhIHBhcmFtZXRlcjsgaWYgaXQncyBhbiBpbnB1 dAoqICAgICAgICAgICAgZWxlbWVudCwgaXRzIHZhbHVlIHdpbGwgYmUgc2V0IHRv IHRoZSByZXN1bHRUZXh0OyBpZiBpdCdzIGFub3RoZXIgdHlwZSBvZgoqICAgICAg ICAgICAgZWxlbWVudCwgaXRzIGlubmVySFRNTCB3aWxsIGJlIHNldCB0byB0aGUg cmVzdWx0VGV4dC4KKgoqIEV4YW1wbGU6CiogICAgc2FqYXhfZG9fY2FsbCgnZG9G b28nLCBbMSwgMiwgM10sIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaG93Rm9v IikpOwoqCiogVGhpcyB3aWxsIGNhbGwgdGhlIGRvRm9vIGZ1bmN0aW9uIHZpYSBN ZWRpYVdpa2kncyBBamF4RGlzcGF0Y2hlciwgd2l0aAoqICgxLCAyLCAzKSBhcyB0 aGUgcGFyYW1ldGVyIGxpc3QsIGFuZCB3aWxsIHNob3cgdGhlIHJlc3VsdCBpbiB0 aGUgZWxlbWVudAoqIHdpdGggaWQgPSBzaG93Rm9vCiovCmZ1bmN0aW9uIHNhamF4 X2RvX2NhbGwoZnVuY19uYW1lLCBhcmdzLCB0YXJnZXQpIHsKCXZhciBpLCB4LCBu OwoJdmFyIHVyaTsKCXZhciBwb3N0X2RhdGE7Cgl1cmkgPSB3Z1NlcnZlciArCgkJ KCh3Z1NjcmlwdCA9PSBudWxsKSA/ICh3Z1NjcmlwdFBhdGggKyAiL2luZGV4LnBo cCIpIDogd2dTY3JpcHQpICsKCQkiP2FjdGlvbj1hamF4IjsKCWlmIChzYWpheF9y ZXF1ZXN0X3R5cGUgPT0gIkdFVCIpIHsKCQlpZiAodXJpLmluZGV4T2YoIj8iKSA9 PSAtMSkKCQkJdXJpID0gdXJpICsgIj9ycz0iICsgZW5jb2RlVVJJQ29tcG9uZW50 KGZ1bmNfbmFtZSk7CgkJZWxzZQoJCQl1cmkgPSB1cmkgKyAiJnJzPSIgKyBlbmNv ZGVVUklDb21wb25lbnQoZnVuY19uYW1lKTsKCQlmb3IgKGkgPSAwOyBpIDwgYXJn cy5sZW5ndGg7IGkrKykKCQkJdXJpID0gdXJpICsgIiZyc2FyZ3NbXT0iICsgZW5j b2RlVVJJQ29tcG9uZW50KGFyZ3NbaV0pOwoJCS8vdXJpID0gdXJpICsgIiZyc3Ju ZD0iICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7CgkJcG9zdF9kYXRhID0gbnVsbDsK CX0gZWxzZSB7CgkJcG9zdF9kYXRhID0gInJzPSIgKyBlbmNvZGVVUklDb21wb25l bnQoZnVuY19uYW1lKTsKCQlmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkr KykKCQkJcG9zdF9kYXRhID0gcG9zdF9kYXRhICsgIiZyc2FyZ3NbXT0iICsgZW5j b2RlVVJJQ29tcG9uZW50KGFyZ3NbaV0pOwoJfQoJeCA9IHNhamF4X2luaXRfb2Jq ZWN0KCk7CglpZiAoIXgpIHsKCQlhbGVydCgiQUpBWCBub3Qgc3VwcG9ydGVkIik7 CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXRyeSB7CgkJeC5vcGVuKHNhamF4X3JlcXVl c3RfdHlwZSwgdXJpLCB0cnVlKTsKCX0gY2F0Y2ggKGUpIHsKCQlpZiAod2luZG93 LmxvY2F0aW9uLmhvc3RuYW1lID09ICJsb2NhbGhvc3QiKSB7CgkJCWFsZXJ0KCJZ b3VyIGJyb3dzZXIgYmxvY2tzIFhNTEh0dHBSZXF1ZXN0IHRvICdsb2NhbGhvc3Qn LCB0cnkgdXNpbmcgYSByZWFsIGhvc3RuYW1lIGZvciBkZXZlbG9wbWVudC90ZXN0 aW5nLiIpOwoJCX0KCQl0aHJvdyBlOwoJfQoJaWYgKHNhamF4X3JlcXVlc3RfdHlw ZSA9PSAiUE9TVCIpIHsKCQl4LnNldFJlcXVlc3RIZWFkZXIoIk1ldGhvZCIsICJQ T1NUICIgKyB1cmkgKyAiIEhUVFAvMS4xIik7CgkJeC5zZXRSZXF1ZXN0SGVhZGVy KCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNv ZGVkIik7Cgl9Cgl4LnNldFJlcXVlc3RIZWFkZXIoIlByYWdtYSIsICJjYWNoZT15 ZXMiKTsKCXguc2V0UmVxdWVzdEhlYWRlcigiQ2FjaGUtQ29udHJvbCIsICJuby10 cmFuc2Zvcm0iKTsKCXgub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7 CgkJaWYgKHgucmVhZHlTdGF0ZSAhPSA0KQoJCQlyZXR1cm47CgoJCXNhamF4X2Rl YnVnKCJyZWNlaXZlZCAoIiArIHguc3RhdHVzICsgIiAiICsgeC5zdGF0dXNUZXh0 ICsgIikgIiArIHgucmVzcG9uc2VUZXh0KTsKCgkJLy9pZiAoeC5zdGF0dXMgIT0g MjAwKQoJCS8vCWFsZXJ0KCJFcnJvcjogIiArIHguc3RhdHVzICsgIiAiICsgeC5z dGF0dXNUZXh0ICsgIjogIiArIHgucmVzcG9uc2VUZXh0KTsKCQkvL2Vsc2UKCgkJ aWYgKCB0eXBlb2YoIHRhcmdldCApID09ICdmdW5jdGlvbicgKSB7CgkJCXRhcmdl dCggeCApOwoJCX0KCQllbHNlIGlmICggdHlwZW9mKCB0YXJnZXQgKSA9PSAnb2Jq ZWN0JyApIHsKCQkJaWYgKCB0YXJnZXQudGFnTmFtZSA9PSAnSU5QVVQnICkgewoJ CQkJaWYgKHguc3RhdHVzID09IDIwMCkgdGFyZ2V0LnZhbHVlPSB4LnJlc3BvbnNl VGV4dDsKCQkJCS8vZWxzZSBhbGVydCgiRXJyb3I6ICIgKyB4LnN0YXR1cyArICIg IiArIHguc3RhdHVzVGV4dCArICIgKCIgKyB4LnJlc3BvbnNlVGV4dCArICIpIik7 CgkJCX0KCQkJZWxzZSB7CgkJCQlpZiAoeC5zdGF0dXMgPT0gMjAwKSB0YXJnZXQu aW5uZXJIVE1MID0geC5yZXNwb25zZVRleHQ7CgkJCQllbHNlIHRhcmdldC5pbm5l ckhUTUw9ICI8ZGl2IGNsYXNzPSdlcnJvcic+RXJyb3I6ICIgKyB4LnN0YXR1cyAr ICIgIiArIHguc3RhdHVzVGV4dCArICIgKCIgKyB4LnJlc3BvbnNlVGV4dCArICIp PC9kaXY+IjsKCQkJfQoJCX0KCQllbHNlIHsKCQkJYWxlcnQoImJhZCB0YXJnZXQg Zm9yIHNhamF4X2RvX2NhbGw6IG5vdCBhIGZ1bmN0aW9uIG9yIG9iamVjdDogIiAr IHRhcmdldCk7CgkJfQoKCQlyZXR1cm47Cgl9CgoJc2FqYXhfZGVidWcoZnVuY19u YW1lICsgIiB1cmkgPSAiICsgdXJpICsgIiAvIHBvc3QgPSAiICsgcG9zdF9kYXRh KTsKCXguc2VuZChwb3N0X2RhdGEpOwoJc2FqYXhfZGVidWcoZnVuY19uYW1lICsg IiB3YWl0aW5nLi4iKTsKCWRlbGV0ZSB4OwoKCXJldHVybiB0cnVlOwp9CgovKioK ICogQHJldHVybiBib29sZWFuIHdoZXRoZXIgdGhlIGJyb3dzZXIgc3VwcG9ydHMg WE1MSHR0cFJlcXVlc3QKICovCmZ1bmN0aW9uIHdmU3VwcG9ydHNBamF4KCkgewoJ dmFyIHJlcXVlc3QgPSBzYWpheF9pbml0X29iamVjdCgpOwoJdmFyIHN1cHBvcnRz QWpheCA9IHJlcXVlc3QgPyB0cnVlIDogZmFsc2U7CglkZWxldGUgcmVxdWVzdDsK CXJldHVybiBzdXBwb3J0c0FqYXg7Cn0KCg== ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=mwsuggest.js Content-Type: application/x-javascript; name=mwsuggest.js Content-Location: http://bits.wikimedia.org/skins-1.5/common/mwsuggest.js?urid=257z26 Content-Transfer-Encoding: Base64 LyoKICogT3BlblNlYXJjaCBhamF4IHN1Z2dlc3Rpb24gZW5naW5lIGZvciBNZWRp YVdpa2kKICoKICogdXNlcyBjb3JlIE1lZGlhV2lraSBvcGVuIHNlYXJjaCBzdXBw b3J0IHRvIGZldGNoIHN1Z2dlc3Rpb25zCiAqIGFuZCBzaG93IHRoZW0gYmVsb3cg c2VhcmNoIGJveGVzIGFuZCBvdGhlciBpbnB1dHMKICoKICogYnkgUm9iZXJ0IFN0 b2puaWMgKEFwcmlsIDIwMDgpCiAqLwoKLy8gc2VhcmNoX2JveF9pZCAtPiBSZXN1 bHRzIG9iamVjdAp2YXIgb3NfbWFwID0ge307Ci8vIGNhY2hlZCBkYXRhLCB1cmwg LT4ganNvbl90ZXh0CnZhciBvc19jYWNoZSA9IHt9OwovLyBnbG9iYWwgdmFyaWFi bGVzIGZvciBzdWdnZXN0X2tleXByZXNzCnZhciBvc19jdXJfa2V5cHJlc3NlZCA9 IDA7CnZhciBvc19rZXlwcmVzc2VkX2NvdW50ID0gMDsKLy8gdHlwZTogVGltZXIK dmFyIG9zX3RpbWVyID0gbnVsbDsKLy8gdGllIG1vdXNlZG93bi91cCBldmVudHMK dmFyIG9zX21vdXNlX3ByZXNzZWQgPSBmYWxzZTsKdmFyIG9zX21vdXNlX251bSA9 IC0xOwovLyBpZiB0cnVlLCB0aGUgbGFzdCBjaGFuZ2Ugd2FzIG1hZGUgYnkgbW91 c2UgKGFuZCBub3Qga2V5Ym9hcmQpCnZhciBvc19tb3VzZV9tb3ZlZCA9IGZhbHNl OwovLyBkZWxheSBiZXR3ZWVuIGtleXByZXNzIGFuZCBzdWdnZXN0aW9uIChpbiBt cykKdmFyIG9zX3NlYXJjaF90aW1lb3V0ID0gMjUwOwovLyB0aGVzZSBwYWlycyBv ZiBpbnB1dHMvZm9ybXMgd2lsbCBiZSBhdXRvbG9hZGVkIGF0IHN0YXJ0dXAKdmFy IG9zX2F1dG9sb2FkX2lucHV0cyA9IG5ldyBBcnJheSgnc2VhcmNoSW5wdXQnLCAn c2VhcmNoSW5wdXQyJywgJ3Bvd2VyU2VhcmNoVGV4dCcsICdzZWFyY2hUZXh0Jyk7 CnZhciBvc19hdXRvbG9hZF9mb3JtcyA9IG5ldyBBcnJheSgnc2VhcmNoZm9ybScs ICdzZWFyY2hmb3JtMicsICdwb3dlcnNlYXJjaCcsICdzZWFyY2gnICk7Ci8vIGlm IHdlIHN0b3BwZWQgdGhlIHNlcnZpY2UKdmFyIG9zX2lzX3N0b3BwZWQgPSBmYWxz ZTsKLy8gbWF4IGxpbmVzIHRvIHNob3cgaW4gc3VnZ2VzdCB0YWJsZQp2YXIgb3Nf bWF4X2xpbmVzX3Blcl9zdWdnZXN0ID0gNzsKLy8gbnVtYmVyIG9mIHN0ZXBzIHRv IGFuaW1hdGUgZXhwYW5zaW9uL2NvbnRyYWN0aW9uIG9mIGNvbnRhaW5lciB3aWR0 aAp2YXIgb3NfYW5pbWF0aW9uX3N0ZXBzID0gNjsKLy8gbnVtIG9mIHBpeGVscyBv ZiBzbWFsbGVzdCBzdGVwCnZhciBvc19hbmltYXRpb25fbWluX3N0ZXAgPSAyOwov LyBkZWxheSBiZXR3ZWVuIHN0ZXBzIChpbiBtcykKdmFyIG9zX2FuaW1hdGlvbl9k ZWxheSA9IDMwOwovLyBtYXggd2lkdGggb2YgY29udGFpbmVyIGluIHBlcmNlbnQg b2Ygbm9ybWFsIHNpemUgKDEgPT0gMTAwJSkKdmFyIG9zX2NvbnRhaW5lcl9tYXhf d2lkdGggPSAyOwovLyBjdXJyZW50bHkgYWN0aXZlIGFuaW1hdGlvbiB0aW1lcgp2 YXIgb3NfYW5pbWF0aW9uX3RpbWVyID0gbnVsbDsKCi8qKiBUaW1lb3V0IHRpbWVy IGNsYXNzIHRoYXQgd2lsbCBmZXRjaCB0aGUgcmVzdWx0cyAqLwpmdW5jdGlvbiBv c19UaW1lcihpZCxyLHF1ZXJ5KXsKCXRoaXMuaWQgPSBpZDsKCXRoaXMuciA9IHI7 Cgl0aGlzLnF1ZXJ5ID0gcXVlcnk7Cn0KCi8qKiBUaW1lciB1c2VyIHRvIGFuaW1h dGUgZXhwYW5zaW9uL2NvbnRyYWN0aW9uIG9mIGNvbnRhaW5lciB3aWR0aCAqLwpm dW5jdGlvbiBvc19BbmltYXRpb25UaW1lcihyLCB0YXJnZXQpewoJdGhpcy5yID0g cjsKCXZhciBjdXJyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5jb250 YWluZXIpLm9mZnNldFdpZHRoOwoJdGhpcy5pbmMgPSBNYXRoLnJvdW5kKCh0YXJn ZXQtY3VycmVudCkgLyBvc19hbmltYXRpb25fc3RlcHMpOwoJaWYodGhpcy5pbmMg PCBvc19hbmltYXRpb25fbWluX3N0ZXAgJiYgdGhpcy5pbmMgPj0wKQoJCXRoaXMu aW5jID0gb3NfYW5pbWF0aW9uX21pbl9zdGVwOyAvLyBtaW5pbWFsIGFuaW1hdGlv biBzdGVwCglpZih0aGlzLmluYyA+IC1vc19hbmltYXRpb25fbWluX3N0ZXAgJiYg dGhpcy5pbmMgPDApCgkJdGhpcy5pbmMgPSAtb3NfYW5pbWF0aW9uX21pbl9zdGVw OwoJdGhpcy50YXJnZXQgPSB0YXJnZXQ7Cn0KCi8qKiBQcm9wZXJ0eSBjbGFzcyBm b3Igc2luZ2xlIHNlYXJjaCBib3ggKi8KZnVuY3Rpb24gb3NfUmVzdWx0cyhuYW1l LCBmb3JtbmFtZSl7Cgl0aGlzLnNlYXJjaGZvcm0gPSBmb3JtbmFtZTsgLy8gaWQg b2YgdGhlIHNlYXJjaGZvcm0KCXRoaXMuc2VhcmNoYm94ID0gbmFtZTsgLy8gaWQg b2YgdGhlIHNlYXJjaGJveAoJdGhpcy5jb250YWluZXIgPSBuYW1lKyJTdWdnZXN0 IjsgLy8gZGl2IHRoYXQgaG9sZHMgcmVzdWx0cwoJdGhpcy5yZXN1bHRUYWJsZSA9 IG5hbWUrIlJlc3VsdCI7IC8vIGlkIGJhc2UgZm9yIHRoZSByZXN1bHQgdGFibGUg KCtudW0gPSB0YWJsZSByb3cpCgl0aGlzLnJlc3VsdFRleHQgPSBuYW1lKyJSZXN1 bHRUZXh0IjsgLy8gaWQgYmFzZSBmb3IgdGhlIHNwYW5zIHdpdGhpbiByZXN1bHQg dGFibGVzICgrbnVtKQoJdGhpcy50b2dnbGUgPSBuYW1lKyJUb2dnbGUiOyAvLyBk aXYgdGhhdCBoYXMgdGhlIHRvZ2dsZSAoZW5hYmxlL2Rpc2FibGUpIGxpbmsKCXRo aXMucXVlcnkgPSBudWxsOyAvLyBsYXN0IHByb2Nlc3NlZCBxdWVyeQoJdGhpcy5y ZXN1bHRzID0gbnVsbDsgIC8vIHBhcnNlZCB0aXRsZXMKCXRoaXMucmVzdWx0Q291 bnQgPSAwOyAvLyBudW1iZXIgb2YgcmVzdWx0cwoJdGhpcy5vcmlnaW5hbCA9IG51 bGw7IC8vIHF1ZXJ5IHRoYXQgdXNlciBlbnRlcmVkCgl0aGlzLnNlbGVjdGVkID0g LTE7IC8vIHdoaWNoIHJlc3VsdCBpcyBzZWxlY3RlZAoJdGhpcy5jb250YWluZXJD b3VudCA9IDA7IC8vIG51bWJlciBvZiByZXN1bHRzIHZpc2libGUgaW4gY29udGFp bmVyCgl0aGlzLmNvbnRhaW5lclJvdyA9IDA7IC8vIGhlaWdodCBvZiByZXN1bHQg ZmllbGQgaW4gdGhlIGNvbnRhaW5lcgoJdGhpcy5jb250YWluZXJUb3RhbCA9IDA7 IC8vIHRvdGFsIGhlaWdodCBvZiB0aGUgY29udGFpbmVyIHdpbGwgYWxsIHJlc3Vs dHMKCXRoaXMudmlzaWJsZSA9IGZhbHNlOyAvLyBpZiBjb250YWluZXIgaXMgdmlz aWJsZQoJdGhpcy5zdGF5SGlkZGVuID0gZmFsc2U7IC8vIGRvbid0IHRyeSB0byBz aG93IGlmIGxvc3QgZm9jdXMKfQoKLyoqIEhpZGUgcmVzdWx0cyBkaXYgKi8KZnVu Y3Rpb24gb3NfaGlkZVJlc3VsdHMocil7Cgl2YXIgYyA9IGRvY3VtZW50LmdldEVs ZW1lbnRCeUlkKHIuY29udGFpbmVyKTsKCWlmKGMgIT0gbnVsbCkKCQljLnN0eWxl LnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKCXIudmlzaWJsZSA9IGZhbHNlOwoJci5z ZWxlY3RlZCA9IC0xOwp9CgovKiogU2hvdyByZXN1bHRzIGRpdiAqLwpmdW5jdGlv biBvc19zaG93UmVzdWx0cyhyKXsKCWlmKG9zX2lzX3N0b3BwZWQpCgkJcmV0dXJu OwoJaWYoci5zdGF5SGlkZGVuKQoJCXJldHVybgoJb3NfZml0Q29udGFpbmVyKHIp OwoJdmFyIGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLmNvbnRhaW5lcik7 CglyLnNlbGVjdGVkID0gLTE7CglpZihjICE9IG51bGwpewoJCWMuc2Nyb2xsVG9w ID0gMDsKCQljLnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CgkJci52aXNp YmxlID0gdHJ1ZTsKCX0KfQoKZnVuY3Rpb24gb3Nfb3BlcmFXaWR0aEZpeCh4KXsK CS8vIEZvciBicm93c2VycyB0aGF0IGRvbid0IHVuZGVyc3RhbmQgb3ZlcmZsb3ct eCwgZXN0aW1hdGUgc2Nyb2xsYmFyIHdpZHRoCglpZih0eXBlb2YgZG9jdW1lbnQu Ym9keS5zdHlsZS5vdmVyZmxvd1ggIT0gInN0cmluZyIpewoJCXJldHVybiAzMDsK CX0KCXJldHVybiAwOwp9CgpmdW5jdGlvbiBvc19lbmNvZGVRdWVyeSh2YWx1ZSl7 CiAgaWYgKGVuY29kZVVSSUNvbXBvbmVudCkgewogICAgcmV0dXJuIGVuY29kZVVS SUNvbXBvbmVudCh2YWx1ZSk7CiAgfQogIGlmKGVzY2FwZSkgewogICAgcmV0dXJu IGVzY2FwZSh2YWx1ZSk7CiAgfQogIHJldHVybiBudWxsOwp9CmZ1bmN0aW9uIG9z X2RlY29kZVZhbHVlKHZhbHVlKXsKICBpZiAoZGVjb2RlVVJJQ29tcG9uZW50KSB7 CiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsKICB9CiAgaWYo dW5lc2NhcGUpewogIAlyZXR1cm4gdW5lc2NhcGUodmFsdWUpOwogIH0KICByZXR1 cm4gbnVsbDsKfQoKLyoqIEJyb3dlci1kZXBlbmRlbnQgZnVuY3Rpb25zIHRvIGZp bmQgd2luZG93IGlubmVyIHNpemUsIGFuZCBzY3JvbGwgc3RhdHVzICovCmZ1bmN0 aW9uIGZfY2xpZW50V2lkdGgoKSB7CglyZXR1cm4gZl9maWx0ZXJSZXN1bHRzICgK CQl3aW5kb3cuaW5uZXJXaWR0aCA/IHdpbmRvdy5pbm5lcldpZHRoIDogMCwKCQlk b2N1bWVudC5kb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1l bnQuY2xpZW50V2lkdGggOiAwLAoJCWRvY3VtZW50LmJvZHkgPyBkb2N1bWVudC5i b2R5LmNsaWVudFdpZHRoIDogMAoJKTsKfQpmdW5jdGlvbiBmX2NsaWVudEhlaWdo dCgpIHsKCXJldHVybiBmX2ZpbHRlclJlc3VsdHMgKAoJCXdpbmRvdy5pbm5lckhl aWdodCA/IHdpbmRvdy5pbm5lckhlaWdodCA6IDAsCgkJZG9jdW1lbnQuZG9jdW1l bnRFbGVtZW50ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdo dCA6IDAsCgkJZG9jdW1lbnQuYm9keSA/IGRvY3VtZW50LmJvZHkuY2xpZW50SGVp Z2h0IDogMAoJKTsKfQpmdW5jdGlvbiBmX3Njcm9sbExlZnQoKSB7CglyZXR1cm4g Zl9maWx0ZXJSZXN1bHRzICgKCQl3aW5kb3cucGFnZVhPZmZzZXQgPyB3aW5kb3cu cGFnZVhPZmZzZXQgOiAwLAoJCWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA/IGRv Y3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogMCwKCQlkb2N1bWVu dC5ib2R5ID8gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0IDogMAoJKTsKfQpmdW5j dGlvbiBmX3Njcm9sbFRvcCgpIHsKCXJldHVybiBmX2ZpbHRlclJlc3VsdHMgKAoJ CXdpbmRvdy5wYWdlWU9mZnNldCA/IHdpbmRvdy5wYWdlWU9mZnNldCA6IDAsCgkJ ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVt ZW50LnNjcm9sbFRvcCA6IDAsCgkJZG9jdW1lbnQuYm9keSA/IGRvY3VtZW50LmJv ZHkuc2Nyb2xsVG9wIDogMAoJKTsKfQpmdW5jdGlvbiBmX2ZpbHRlclJlc3VsdHMo bl93aW4sIG5fZG9jZWwsIG5fYm9keSkgewoJdmFyIG5fcmVzdWx0ID0gbl93aW4g PyBuX3dpbiA6IDA7CglpZiAobl9kb2NlbCAmJiAoIW5fcmVzdWx0IHx8IChuX3Jl c3VsdCA+IG5fZG9jZWwpKSkKCQluX3Jlc3VsdCA9IG5fZG9jZWw7CglyZXR1cm4g bl9ib2R5ICYmICghbl9yZXN1bHQgfHwgKG5fcmVzdWx0ID4gbl9ib2R5KSkgPyBu X2JvZHkgOiBuX3Jlc3VsdDsKfQoKLyoqIEdldCB0aGUgaGVpZ2h0IGF2YWlsYWJs ZSBmb3IgdGhlIHJlc3VsdHMgY29udGFpbmVyICovCmZ1bmN0aW9uIG9zX2F2YWls YWJsZUhlaWdodChyKXsKCXZhciBhYnNUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50 QnlJZChyLmNvbnRhaW5lcikuc3R5bGUudG9wOwoJdmFyIHB4ID0gYWJzVG9wLmxh c3RJbmRleE9mKCJweCIpOwoJaWYocHggPiAwKQoJCWFic1RvcCA9IGFic1RvcC5z dWJzdHJpbmcoMCxweCk7CglyZXR1cm4gZl9jbGllbnRIZWlnaHQoKSAtIChhYnNU b3AgLSBmX3Njcm9sbFRvcCgpKTsKfQoKCi8qKiBHZXQgZWxlbWVudCBhYnNvbHV0 ZSBwb3NpdGlvbiB7bGVmdCx0b3B9ICovCmZ1bmN0aW9uIG9zX2dldEVsZW1lbnRQ b3NpdGlvbihlbGVtSUQpewoJdmFyIG9mZnNldFRyYWlsID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoZWxlbUlEKTsKCXZhciBvZmZzZXRMZWZ0ID0gMDsKCXZhciBv ZmZzZXRUb3AgPSAwOwoJd2hpbGUgKG9mZnNldFRyYWlsKXsKCQlvZmZzZXRMZWZ0 ICs9IG9mZnNldFRyYWlsLm9mZnNldExlZnQ7CgkJb2Zmc2V0VG9wICs9IG9mZnNl dFRyYWlsLm9mZnNldFRvcDsKCQlvZmZzZXRUcmFpbCA9IG9mZnNldFRyYWlsLm9m ZnNldFBhcmVudDsKCX0KCWlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2Yo J01hYycpICE9IC0xICYmIHR5cGVvZiBkb2N1bWVudC5ib2R5LmxlZnRNYXJnaW4g IT0gJ3VuZGVmaW5lZCcpewoJCW9mZnNldExlZnQgKz0gZG9jdW1lbnQuYm9keS5s ZWZ0TWFyZ2luOwoJCW9mZnNldFRvcCArPSBkb2N1bWVudC5ib2R5LnRvcE1hcmdp bjsKCX0KCXJldHVybiB7bGVmdDpvZmZzZXRMZWZ0LHRvcDpvZmZzZXRUb3B9Owp9 CgovKiogQ3JlYXRlIHRoZSBjb250YWluZXIgZGl2IHRoYXQgd2lsbCBob2xkIHRo ZSBzdWdnZXN0ZWQgdGl0bGVzICovCmZ1bmN0aW9uIG9zX2NyZWF0ZUNvbnRhaW5l cihyKXsKCXZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cgl2 YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuc2VhcmNoYm94KTsKCXZh ciBwb3MgPSBvc19nZXRFbGVtZW50UG9zaXRpb24oci5zZWFyY2hib3gpOwoJdmFy IGxlZnQgPSBwb3MubGVmdDsKCXZhciB0b3AgPSBwb3MudG9wICsgcy5vZmZzZXRI ZWlnaHQ7CgljLmNsYXNzTmFtZSA9ICJvcy1zdWdnZXN0IjsKCWMuc2V0QXR0cmli dXRlKCJpZCIsIHIuY29udGFpbmVyKTsKCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp bGQoYyk7CgoJLy8gZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHN0eWxlIHBhcmFtcwoJ Ly8gSUUgd29ya2Fyb3VuZCwgY2Fubm90IGV4cGxpY2l0ZWx5IHNldCAic3R5bGUi IGF0dHJpYnV0ZQoJYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuY29udGFp bmVyKTsKCWMuc3R5bGUudG9wID0gdG9wKyJweCI7CgljLnN0eWxlLmxlZnQgPSBs ZWZ0KyJweCI7CgljLnN0eWxlLndpZHRoID0gcy5vZmZzZXRXaWR0aCsicHgiOwoK CS8vIG1vdXNlIGV2ZW50IGhhbmRsZXJzCgljLm9ubW91c2VvdmVyID0gZnVuY3Rp b24oZXZlbnQpIHsgb3NfZXZlbnRNb3VzZW92ZXIoci5zZWFyY2hib3gsIGV2ZW50 KTsgfTsKCWMub25tb3VzZW1vdmUgPSBmdW5jdGlvbihldmVudCkgeyBvc19ldmVu dE1vdXNlbW92ZShyLnNlYXJjaGJveCwgZXZlbnQpOyB9OwoJYy5vbm1vdXNlZG93 biA9IGZ1bmN0aW9uKGV2ZW50KSB7IHJldHVybiBvc19ldmVudE1vdXNlZG93bihy LnNlYXJjaGJveCwgZXZlbnQpOyB9OwoJYy5vbm1vdXNldXAgPSBmdW5jdGlvbihl dmVudCkgeyBvc19ldmVudE1vdXNldXAoci5zZWFyY2hib3gsIGV2ZW50KTsgfTsK CXJldHVybiBjOwp9CgovKiogY2hhbmdlIGNvbnRhaW5lciBoZWlnaHQgdG8gZml0 IHRvIHNjcmVlbiAqLwpmdW5jdGlvbiBvc19maXRDb250YWluZXIocil7Cgl2YXIg YyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuY29udGFpbmVyKTsKCXZhciBo ID0gb3NfYXZhaWxhYmxlSGVpZ2h0KHIpIC0gMjA7Cgl2YXIgaW5jID0gci5jb250 YWluZXJSb3c7CgloID0gcGFyc2VJbnQoaC9pbmMpICogaW5jOwoJaWYoaCA8ICgy ICogaW5jKSAmJiByLnJlc3VsdENvdW50ID4gMSkgLy8gbWluOiB0d28gcmVzdWx0 cwoJCWggPSAyICogaW5jOwoJaWYoKGgvaW5jKSA+IG9zX21heF9saW5lc19wZXJf c3VnZ2VzdCApCgkJaCA9IGluYyAqIG9zX21heF9saW5lc19wZXJfc3VnZ2VzdDsK CWlmKGggPCByLmNvbnRhaW5lclRvdGFsKXsKCQljLnN0eWxlLmhlaWdodCA9IGgg KyJweCI7CgkJci5jb250YWluZXJDb3VudCA9IHBhcnNlSW50KE1hdGgucm91bmQo aC9pbmMpKTsKCX0gZWxzZXsKCQljLnN0eWxlLmhlaWdodCA9IHIuY29udGFpbmVy VG90YWwrInB4IjsKCQlyLmNvbnRhaW5lckNvdW50ID0gci5yZXN1bHRDb3VudDsK CX0KfQovKiogSWYgc29tZSBlbnRyaWVzIGFyZSBsb25nZXIgdGhhbiB0aGUgYm94 LCByZXBsYWNlIHRleHQgd2l0aCAiLi4uIiAqLwpmdW5jdGlvbiBvc190cmltUmVz dWx0VGV4dChyKXsKCS8vIGZpbmQgbWF4IHdpZHRoLCBmaXJzdCBzZWUgaWYgd2Ug Y291bGQgZXhwYW5kIHRoZSBjb250YWluZXIgdG8gZml0IGl0Cgl2YXIgbWF4VyA9 IDA7Cglmb3IodmFyIGk9MDtpPHIucmVzdWx0Q291bnQ7aSsrKXsKCQl2YXIgZSA9 IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIucmVzdWx0VGV4dCtpKTsKCQlpZihl Lm9mZnNldFdpZHRoID4gbWF4VykKCQkJbWF4VyA9IGUub2Zmc2V0V2lkdGg7Cgl9 Cgl2YXIgdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuY29udGFpbmVyKS5v ZmZzZXRXaWR0aDsKCXZhciBmaXggPSAwOwoJaWYoci5jb250YWluZXJDb3VudCA8 IHIucmVzdWx0Q291bnQpewoJCWZpeCA9IDIwOyAvLyBnaXZlIDIwcHggZm9yIHNj cm9sbGJhcgoJfSBlbHNlCgkJZml4ID0gb3Nfb3BlcmFXaWR0aEZpeCh3KTsKCWlm KGZpeCA8IDQpCgkJZml4ID0gNDsgLy8gYmFzaWMgcGFkZGluZwoJbWF4VyArPSBm aXg7CgoJLy8gcmVzaXplIGNvbnRhaW5lciB0byBmaXQgbW9yZSBkYXRhIGlmIHBl cm1pdHRlZAoJdmFyIG5vcm1XID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5z ZWFyY2hib3gpLm9mZnNldFdpZHRoOwoJdmFyIHByb3AgPSBtYXhXIC8gbm9ybVc7 CglpZihwcm9wID4gb3NfY29udGFpbmVyX21heF93aWR0aCkKCQlwcm9wID0gb3Nf Y29udGFpbmVyX21heF93aWR0aDsKCWVsc2UgaWYocHJvcCA8IDEpCgkJcHJvcCA9 IDE7Cgl2YXIgbmV3VyA9IE1hdGgucm91bmQoIG5vcm1XICogcHJvcCApOwoJaWYo IHcgIT0gbmV3VyApewoJCXcgPSBuZXdXOwoJCWlmKCBvc19hbmltYXRpb25fdGlt ZXIgIT0gbnVsbCApCgkJCWNsZWFySW50ZXJ2YWwob3NfYW5pbWF0aW9uX3RpbWVy LmlkKQoJCW9zX2FuaW1hdGlvbl90aW1lciA9IG5ldyBvc19BbmltYXRpb25UaW1l cihyLHcpOwoJCW9zX2FuaW1hdGlvbl90aW1lci5pZCA9IHNldEludGVydmFsKCJv c19hbmltYXRlQ2hhbmdlV2lkdGgoKSIsb3NfYW5pbWF0aW9uX2RlbGF5KTsKCQl3 IC09IGZpeDsgLy8gdGhpcyBtdWNoIGlzIHJlc2VydmVkCgl9CgoJLy8gdHJpbSBy ZXN1bHRzCglpZih3IDwgMTApCgkJcmV0dXJuOwoJZm9yKHZhciBpPTA7aTxyLnJl c3VsdENvdW50O2krKyl7CgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZChyLnJlc3VsdFRleHQraSk7CgkJdmFyIHJlcGxhY2UgPSAxOwoJCXZhciBsYXN0 VyA9IGUub2Zmc2V0V2lkdGgrMTsKCQl2YXIgaXRlcmF0aW9uID0gMDsKCQl2YXIg Y2hhbmdlZFRleHQgPSBmYWxzZTsKCQl3aGlsZShlLm9mZnNldFdpZHRoID4gdyAm JiAoZS5vZmZzZXRXaWR0aCA8IGxhc3RXIHx8IGl0ZXJhdGlvbjwyKSl7CgkJCWNo YW5nZWRUZXh0ID0gdHJ1ZTsKCQkJbGFzdFcgPSBlLm9mZnNldFdpZHRoOwoJCQl2 YXIgbCA9IGUuaW5uZXJIVE1MOwoJCQllLmlubmVySFRNTCA9IGwuc3Vic3RyaW5n KDAsbC5sZW5ndGgtcmVwbGFjZSkrIi4uLiI7CgkJCWl0ZXJhdGlvbisrOwoJCQly ZXBsYWNlID0gNDsgLy8gaG93IG1hbnkgY2hhcnMgdG8gcmVwbGFjZQoJCX0KCQlp ZihjaGFuZ2VkVGV4dCl7CgkJCS8vIHNob3cgaGludCBmb3IgdHJpbW1lZCB0aXRs ZXMKCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5yZXN1bHRUYWJsZStpKS5z ZXRBdHRyaWJ1dGUoInRpdGxlIixyLnJlc3VsdHNbaV0pOwoJCX0KCX0KfQoKLyoq IEludm9rZWQgb24gdGltZXIgdG8gYW5pbWF0ZSBjaGFuZ2UgaW4gY29udGFpbmVy IHdpZHRoICovCmZ1bmN0aW9uIG9zX2FuaW1hdGVDaGFuZ2VXaWR0aCgpewoJdmFy IHIgPSBvc19hbmltYXRpb25fdGltZXIucjsKCXZhciBjID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoci5jb250YWluZXIpOwoJdmFyIHcgPSBjLm9mZnNldFdpZHRo OwoJdmFyIG5vcm1XID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5zZWFyY2hi b3gpLm9mZnNldFdpZHRoOwoJdmFyIG5vcm1MID0gb3NfZ2V0RWxlbWVudFBvc2l0 aW9uKHIuc2VhcmNoYm94KS5sZWZ0OwoJdmFyIGluYyA9IG9zX2FuaW1hdGlvbl90 aW1lci5pbmM7Cgl2YXIgdGFyZ2V0ID0gb3NfYW5pbWF0aW9uX3RpbWVyLnRhcmdl dDsKCXZhciBudyA9IHcgKyBpbmM7CglpZiggKGluYyA+IDAgJiYgbncgPj0gdGFy Z2V0KSB8fCAoaW5jIDw9IDAgJiYgbncgPD0gdGFyZ2V0KSApewoJCS8vIGZpbmlz aGVkICEKCQljLnN0eWxlLndpZHRoID0gdGFyZ2V0KyJweCI7CgkJY2xlYXJJbnRl cnZhbChvc19hbmltYXRpb25fdGltZXIuaWQpCgkJb3NfYW5pbWF0aW9uX3RpbWVy ID0gbnVsbDsKCX0gZWxzZXsKCQkvLyBpbi1wcm9ncmVzcwoJCWMuc3R5bGUud2lk dGggPSBudysicHgiOwoJCWlmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIg PT0gInJ0bCIpCgkJCWMuc3R5bGUubGVmdCA9IChub3JtTCArIG5vcm1XICsgKHRh cmdldCAtIG53KSAtIG9zX2FuaW1hdGlvbl90aW1lci50YXJnZXQgLSAxKSsicHgi OwoJfQp9CgovKiogSGFuZGxlcyBkYXRhIGZyb20gWE1MSHR0cFJlcXVlc3QsIGFu ZCB1cGRhdGVzIHRoZSBzdWdnZXN0IHJlc3VsdHMgKi8KZnVuY3Rpb24gb3NfdXBk YXRlUmVzdWx0cyhyLCBxdWVyeSwgdGV4dCwgY2FjaGVLZXkpewoJb3NfY2FjaGVb Y2FjaGVLZXldID0gdGV4dDsKCXIucXVlcnkgPSBxdWVyeTsKCXIub3JpZ2luYWwg PSBxdWVyeTsKCWlmKHRleHQgPT0gIiIpewoJCXIucmVzdWx0cyA9IG51bGw7CgkJ ci5yZXN1bHRDb3VudCA9IDA7CgkJb3NfaGlkZVJlc3VsdHMocik7Cgl9IGVsc2V7 CgkJdHJ5IHsKCQkJdmFyIHAgPSBldmFsKCcoJyt0ZXh0KycpJyk7IC8vIHNpbXBs ZSBqc29uIHBhcnNlLCBjb3VsZCBkbyBhIHNhZmVyIG9uZQoJCQlpZihwLmxlbmd0 aDwyIHx8IHBbMV0ubGVuZ3RoID09IDApewoJCQkJci5yZXN1bHRzID0gbnVsbDsK CQkJCXIucmVzdWx0Q291bnQgPSAwOwoJCQkJb3NfaGlkZVJlc3VsdHMocik7CgkJ CQlyZXR1cm47CgkJCX0KCQkJdmFyIGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZChyLmNvbnRhaW5lcik7CgkJCWlmKGMgPT0gbnVsbCkKCQkJCWMgPSBvc19jcmVh dGVDb250YWluZXIocik7CgkJCWMuaW5uZXJIVE1MID0gb3NfY3JlYXRlUmVzdWx0 VGFibGUocixwWzFdKTsKCQkJLy8gaW5pdCBjb250YWluZXIgdGFibGUgc2l6ZXMK CQkJdmFyIHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLnJlc3VsdFRhYmxl KTsKCQkJci5jb250YWluZXJUb3RhbCA9IHQub2Zmc2V0SGVpZ2h0OwoJCQlyLmNv bnRhaW5lclJvdyA9IHQub2Zmc2V0SGVpZ2h0IC8gci5yZXN1bHRDb3VudDsKCQkJ b3NfZml0Q29udGFpbmVyKHIpOwoJCQlvc190cmltUmVzdWx0VGV4dChyKTsKCQkJ b3Nfc2hvd1Jlc3VsdHMocik7CgkJfSBjYXRjaChlKXsKCQkJLy8gYmFkIHJlc3Bv bnNlIGZyb20gc2VydmVyIG9yIHN1Y2gKCQkJb3NfaGlkZVJlc3VsdHMocik7CgkJ CW9zX2NhY2hlW2NhY2hlS2V5XSA9IG51bGw7CgkJfQoJfQp9CgovKiogQ3JlYXRl IHRoZSByZXN1bHQgdGFibGUgdG8gYmUgcGxhY2VkIGluIHRoZSBjb250YWluZXIg ZGl2ICovCmZ1bmN0aW9uIG9zX2NyZWF0ZVJlc3VsdFRhYmxlKHIsIHJlc3VsdHMp ewoJdmFyIGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLmNvbnRhaW5lcik7 Cgl2YXIgd2lkdGggPSBjLm9mZnNldFdpZHRoIC0gb3Nfb3BlcmFXaWR0aEZpeChj Lm9mZnNldFdpZHRoKTsKCXZhciBodG1sID0gIjx0YWJsZSBjbGFzcz1cIm9zLXN1 Z2dlc3QtcmVzdWx0c1wiIGlkPVwiIityLnJlc3VsdFRhYmxlKyJcIiBzdHlsZT1c IndpZHRoOiAiK3dpZHRoKyJweDtcIj4iOwoJci5yZXN1bHRzID0gbmV3IEFycmF5 KCk7CglyLnJlc3VsdENvdW50ID0gcmVzdWx0cy5sZW5ndGg7Cglmb3IoaT0wO2k8 cmVzdWx0cy5sZW5ndGg7aSsrKXsKCQl2YXIgdGl0bGUgPSBvc19kZWNvZGVWYWx1 ZShyZXN1bHRzW2ldKTsKCQlyLnJlc3VsdHNbaV0gPSB0aXRsZTsKCQlodG1sICs9 ICI8dHI+PHRkIGNsYXNzPVwib3Mtc3VnZ2VzdC1yZXN1bHRcIiBpZD1cIiIrci5y ZXN1bHRUYWJsZStpKyJcIj48c3BhbiBpZD1cIiIrci5yZXN1bHRUZXh0K2krIlwi PiIrdGl0bGUrIjwvc3Bhbj48L3RkPjwvdHI+IjsKCX0KCWh0bWwrPSI8L3RhYmxl PiIKCXJldHVybiBodG1sOwp9CgovKiogRmV0Y2ggbmFtZXNwYWNlcyBmcm9tIGNo ZWNrYm94ZXMgb3IgaGlkZGVuIGZpZWxkcyBpbiB0aGUgc2VhcmNoIGZvcm0sCiAg ICBpZiBub25lIGRlZmluZWQgdXNlIHdnU2VhcmNoTmFtZXNwYWNlcyBnbG9iYWwg Ki8KZnVuY3Rpb24gb3NfZ2V0TmFtZXNwYWNlcyhyKXsKCXZhciBuYW1lc3BhY2Vz ID0gIiI7Cgl2YXIgZWxlbWVudHMgPSBkb2N1bWVudC5mb3Jtc1tyLnNlYXJjaGZv cm1dLmVsZW1lbnRzOwoJZm9yKGk9MDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsr KXsKCQl2YXIgbmFtZSA9IGVsZW1lbnRzW2ldLm5hbWU7CgkJaWYodHlwZW9mIG5h bWUgIT0gJ3VuZGVmaW5lZCcgJiYgbmFtZS5sZW5ndGggPiAyCgkJJiYgbmFtZVsw XT09J24nICYmIG5hbWVbMV09PSdzJwoJCSYmICgoZWxlbWVudHNbaV0udHlwZT09 J2NoZWNrYm94JyAmJiBlbGVtZW50c1tpXS5jaGVja2VkKQoJCSAJfHwgKGVsZW1l bnRzW2ldLnR5cGU9PSdoaWRkZW4nICYmIGVsZW1lbnRzW2ldLnZhbHVlPT0iMSIp KSApewoJCQlpZihuYW1lc3BhY2VzIT0iIikKCQkJCW5hbWVzcGFjZXMrPSJ8IjsK CQkJbmFtZXNwYWNlcys9bmFtZS5zdWJzdHJpbmcoMik7CgkJfQoJfQoJaWYobmFt ZXNwYWNlcyA9PSAiIikKCQluYW1lc3BhY2VzID0gd2dTZWFyY2hOYW1lc3BhY2Vz LmpvaW4oInwiKTsKCXJldHVybiBuYW1lc3BhY2VzOwp9CgovKiogVXBkYXRlIHJl c3VsdHMgaWYgdXNlciBoYXNuJ3QgYWxyZWFkeSB0eXBlZCBzb21ldGhpbmcgZWxz ZSAqLwpmdW5jdGlvbiBvc191cGRhdGVJZlJlbGV2YW50KHIsIHF1ZXJ5LCB0ZXh0 LCBjYWNoZUtleSl7Cgl2YXIgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIu c2VhcmNoYm94KTsKCWlmKHQgIT0gbnVsbCAmJiB0LnZhbHVlID09IHF1ZXJ5KXsg Ly8gY2hlY2sgaWYgcmVzcG9uc2UgaXMgc3RpbGwgcmVsZXZhbnQKCQlvc191cGRh dGVSZXN1bHRzKHIsIHF1ZXJ5LCB0ZXh0LCBjYWNoZUtleSk7Cgl9CglyLnF1ZXJ5 ID0gcXVlcnk7Cn0KCi8qKiBGZXRjaCByZXN1bHRzIGFmdGVyIHNvbWUgdGltZW91 dCAqLwpmdW5jdGlvbiBvc19kZWxheWVkRmV0Y2goKXsKCWlmKG9zX3RpbWVyID09 IG51bGwpCgkJcmV0dXJuOwoJdmFyIHIgPSBvc190aW1lci5yOwoJdmFyIHF1ZXJ5 ID0gb3NfdGltZXIucXVlcnk7Cglvc190aW1lciA9IG51bGw7Cgl2YXIgcGF0aCA9 IHdnTVdTdWdnZXN0VGVtcGxhdGUucmVwbGFjZSgie25hbWVzcGFjZXN9Iixvc19n ZXROYW1lc3BhY2VzKHIpKQoJCQkJCQkJICAJICAucmVwbGFjZSgie2RibmFtZX0i LHdnREJuYW1lKQoJCQkJCQkJICAJICAucmVwbGFjZSgie3NlYXJjaFRlcm1zfSIs b3NfZW5jb2RlUXVlcnkocXVlcnkpKTsKCgkvLyB0cnkgdG8gZ2V0IGZyb20gY2Fj aGUsIGlmIG5vdCBmZXRjaCB1c2luZyBhamF4Cgl2YXIgY2FjaGVkID0gb3NfY2Fj aGVbcGF0aF07CglpZihjYWNoZWQgIT0gbnVsbCl7CgkJb3NfdXBkYXRlSWZSZWxl dmFudChyLCBxdWVyeSwgY2FjaGVkLCBwYXRoKTsKCX0gZWxzZXsKCQl2YXIgeG1s aHR0cCA9IHNhamF4X2luaXRfb2JqZWN0KCk7CgkJaWYoeG1saHR0cCl7CgkJCXRy eSB7CgkJCQl4bWxodHRwLm9wZW4oIkdFVCIsIHBhdGgsIHRydWUpOwoJCQkJeG1s aHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXsKCQkgICAgICAgIAlp ZiAoeG1saHR0cC5yZWFkeVN0YXRlPT00ICYmIHR5cGVvZiBvc191cGRhdGVJZlJl bGV2YW50ID09ICdmdW5jdGlvbicpIHsKCQkgICAgICAgIAkJb3NfdXBkYXRlSWZS ZWxldmFudChyLCBxdWVyeSwgeG1saHR0cC5yZXNwb25zZVRleHQsIHBhdGgpOwoJ ICAgICAgICAJCX0KCSAgICAgIAkJfTsKCSAgICAgCQl4bWxodHRwLnNlbmQobnVs bCk7CgkgICAgIAl9IGNhdGNoIChlKSB7CgkJCQlpZiAod2luZG93LmxvY2F0aW9u Lmhvc3RuYW1lID09ICJsb2NhbGhvc3QiKSB7CgkJCQkJYWxlcnQoIllvdXIgYnJv d3NlciBibG9ja3MgWE1MSHR0cFJlcXVlc3QgdG8gJ2xvY2FsaG9zdCcsIHRyeSB1 c2luZyBhIHJlYWwgaG9zdG5hbWUgZm9yIGRldmVsb3BtZW50L3Rlc3RpbmcuIik7 CgkJCQl9CgkJCQl0aHJvdyBlOwoJCQl9CgkJfQoJfQp9CgovKiogSW5pdCB0aW1l ZCB1cGRhdGUgdmlhIG9zX2RlbGF5ZWRVcGRhdGUoKSAqLwpmdW5jdGlvbiBvc19m ZXRjaFJlc3VsdHMociwgcXVlcnksIHRpbWVvdXQpewoJaWYocXVlcnkgPT0gIiIp ewoJCXIucXVlcnkgPSAiIjsKCQlvc19oaWRlUmVzdWx0cyhyKTsKCQlyZXR1cm47 Cgl9IGVsc2UgaWYocXVlcnkgPT0gci5xdWVyeSkKCQlyZXR1cm47IC8vIG5vIGNo YW5nZQoKCW9zX2lzX3N0b3BwZWQgPSBmYWxzZTsgLy8gbWFrZSBzdXJlIHdlJ3Jl IHJ1bm5pbmcKCgkvKiB2YXIgY2FjaGVLZXkgPSB3Z0RCbmFtZSsiOiIrcXVlcnk7 Cgl2YXIgY2FjaGVkID0gb3NfY2FjaGVbY2FjaGVLZXldOwoJaWYoY2FjaGVkICE9 IG51bGwpewoJCW9zX3VwZGF0ZVJlc3VsdHMocix3Z0RCbmFtZSxxdWVyeSxjYWNo ZWQpOwoJCXJldHVybjsKCX0gKi8KCgkvLyBjYW5jZWwgYW55IHBlbmRpbmcgZmV0 Y2hlcwoJaWYob3NfdGltZXIgIT0gbnVsbCAmJiBvc190aW1lci5pZCAhPSBudWxs KQoJCWNsZWFyVGltZW91dChvc190aW1lci5pZCk7CgkvLyBzY2hlZHVsZSBkZWxh eWVkIGZldGNoaW5nIG9mIHJlc3VsdHMKCWlmKHRpbWVvdXQgIT0gMCl7CgkJb3Nf dGltZXIgPSBuZXcgb3NfVGltZXIoc2V0VGltZW91dCgib3NfZGVsYXllZEZldGNo KCkiLHRpbWVvdXQpLHIscXVlcnkpOwoJfSBlbHNlewoJCW9zX3RpbWVyID0gbmV3 IG9zX1RpbWVyKG51bGwscixxdWVyeSk7CgkJb3NfZGVsYXllZEZldGNoKCk7IC8v IGRvIGl0IG5vdyEKCX0KCn0KLyoqIENoYW5nZSB0aGUgaGlnaGxpZ2h0ZWQgcm93 IChpLmUuIHN1Z2dlc3Rpb24pLCBmcm9tIHBvc2l0aW9uIGN1ciB0byBuZXh0ICov CmZ1bmN0aW9uIG9zX2NoYW5nZUhpZ2hsaWdodChyLCBjdXIsIG5leHQsIHVwZGF0 ZVNlYXJjaEJveCl7CglpZiAobmV4dCA+PSByLnJlc3VsdENvdW50KQoJCW5leHQg PSByLnJlc3VsdENvdW50LTE7CglpZiAobmV4dCA8IC0xKQoJCW5leHQgPSAtMTsK CXIuc2VsZWN0ZWQgPSBuZXh0OwogICAJaWYgKGN1ciA9PSBuZXh0KQogICAgCXJl dHVybjsgLy8gbm90aGluZyB0byBkby4KCiAgICBpZihjdXIgPj0gMCl7CiAgICAJ dmFyIGN1clJvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIucmVzdWx0VGFi bGUgKyBjdXIpOwogICAgCWlmKGN1clJvdyAhPSBudWxsKQogICAgCQljdXJSb3cu Y2xhc3NOYW1lID0gIm9zLXN1Z2dlc3QtcmVzdWx0IjsKICAgIH0KICAgIHZhciBu ZXdUZXh0OwogICAgaWYobmV4dCA+PSAwKXsKICAgIAl2YXIgbmV4dFJvdyA9IGRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKHIucmVzdWx0VGFibGUgKyBuZXh0KTsKICAg IAlpZihuZXh0Um93ICE9IG51bGwpCiAgICAJCW5leHRSb3cuY2xhc3NOYW1lID0g b3NfSGlnaGxpZ2h0Q2xhc3MoKTsKICAgIAluZXdUZXh0ID0gci5yZXN1bHRzW25l eHRdOwogICAgfSBlbHNlCiAgICAJbmV3VGV4dCA9IHIub3JpZ2luYWw7CgogICAg Ly8gYWRqdXN0IHRoZSBzY3JvbGxiYXIgaWYgYW55CiAgICBpZihyLmNvbnRhaW5l ckNvdW50IDwgci5yZXN1bHRDb3VudCl7CiAgICAJdmFyIGMgPSBkb2N1bWVudC5n ZXRFbGVtZW50QnlJZChyLmNvbnRhaW5lcik7CiAgICAJdmFyIHZTdGFydCA9IGMu c2Nyb2xsVG9wIC8gci5jb250YWluZXJSb3c7CiAgICAJdmFyIHZFbmQgPSB2U3Rh cnQgKyByLmNvbnRhaW5lckNvdW50OwogICAgCWlmKG5leHQgPCB2U3RhcnQpCiAg ICAJCWMuc2Nyb2xsVG9wID0gbmV4dCAqIHIuY29udGFpbmVyUm93OwogICAgCWVs c2UgaWYobmV4dCA+PSB2RW5kKQogICAgCQljLnNjcm9sbFRvcCA9IChuZXh0IC0g ci5jb250YWluZXJDb3VudCArIDEpICogci5jb250YWluZXJSb3c7CiAgICB9Cgog ICAgLy8gdXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgc2VhcmNoIGJveAogICAg aWYodXBkYXRlU2VhcmNoQm94KXsKICAgIAlvc191cGRhdGVTZWFyY2hRdWVyeShy LG5ld1RleHQpOwogICAgfQp9CgpmdW5jdGlvbiBvc19IaWdobGlnaHRDbGFzcygp IHsKCXZhciBtYXRjaCA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxl V2ViS2l0XC8oXGQrKS8pOwoJaWYgKG1hdGNoKSB7CgkJdmFyIHdlYktpdFZlcnNp b24gPSBwYXJzZUludChtYXRjaFsxXSk7CgkJaWYgKHdlYktpdFZlcnNpb24gPCA1 MjMpIHsKCQkJLy8gQ1NTIHN5c3RlbSBoaWdobGlnaHQgY29sb3JzIGJyb2tlbiBv biBvbGQgU2FmYXJpCgkJCS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df YnVnLmNnaT9pZD02MTI5CgkJCS8vIFNhZmFyaSAzLjAuNCwgMy4xIGtub3duIG9r CgkJCXJldHVybiAib3Mtc3VnZ2VzdC1yZXN1bHQtaGwtd2Via2l0IjsKCQl9Cgl9 CglyZXR1cm4gIm9zLXN1Z2dlc3QtcmVzdWx0LWhsIjsKfQoKZnVuY3Rpb24gb3Nf dXBkYXRlU2VhcmNoUXVlcnkocixuZXdUZXh0KXsKCWRvY3VtZW50LmdldEVsZW1l bnRCeUlkKHIuc2VhcmNoYm94KS52YWx1ZSA9IG5ld1RleHQ7CiAgICByLnF1ZXJ5 ID0gbmV3VGV4dDsKfQoKLyoqIEZpbmQgZXZlbnQgdGFyZ2V0ICovCmZ1bmN0aW9u IG9zX2dldFRhcmdldChlKXsKCWlmICghZSkgZSA9IHdpbmRvdy5ldmVudDsKCWlm IChlLnRhcmdldCkgcmV0dXJuIGUudGFyZ2V0OwoJZWxzZSBpZiAoZS5zcmNFbGVt ZW50KSByZXR1cm4gZS5zcmNFbGVtZW50OwoJZWxzZSByZXR1cm4gbnVsbDsKfQoK CgovKioqKioqKioqKioqKioqKioqKioKICogIEtleWJvYXJkIGV2ZW50cwogKioq KioqKioqKioqKioqKioqKiovCgovKiogRXZlbnQgaGFuZGxlciB0aGF0IHdpbGwg ZmV0Y2ggcmVzdWx0cyBvbiBrZXl1cCAqLwpmdW5jdGlvbiBvc19ldmVudEtleXVw KGUpewoJdmFyIHRhcmcgPSBvc19nZXRUYXJnZXQoZSk7Cgl2YXIgciA9IG9zX21h cFt0YXJnLmlkXTsKCWlmKHIgPT0gbnVsbCkKCQlyZXR1cm47IC8vIG5vdCBvdXIg ZXZlbnQKCgkvLyBzb21lIGJyb3dzZXJzIHdvbid0IGdlbmVyYXRlIGtleXByZXNz ZWQgZm9yIGFycm93IGtleXMsIGNhdGNoIGl0CglpZihvc19rZXlwcmVzc2VkX2Nv dW50ID09IDApewoJCW9zX3Byb2Nlc3NLZXkocixvc19jdXJfa2V5cHJlc3NlZCx0 YXJnKTsKCX0KCXZhciBxdWVyeSA9IHRhcmcudmFsdWU7Cglvc19mZXRjaFJlc3Vs dHMocixxdWVyeSxvc19zZWFyY2hfdGltZW91dCk7Cn0KCi8qKiBjYXRjaCBhcnJv d3MgdXAvZG93biBhbmQgZXNjYXBlIHRvIGhpZGUgdGhlIHN1Z2dlc3Rpb25zICov CmZ1bmN0aW9uIG9zX3Byb2Nlc3NLZXkocixrZXlwcmVzc2VkLHRhcmcpewoJaWYg KGtleXByZXNzZWQgPT0gNDApeyAvLyBBcnJvdyBEb3duCiAgICAJaWYgKHIudmlz aWJsZSkgewogICAgICAJCW9zX2NoYW5nZUhpZ2hsaWdodChyLCByLnNlbGVjdGVk LCByLnNlbGVjdGVkKzEsIHRydWUpOwogICAgCX0gZWxzZSBpZihvc190aW1lciA9 PSBudWxsKXsKICAgIAkJLy8gdXNlciB3YW50cyB0byBnZXQgc3VnZ2VzdGlvbnMg bm93CiAgICAJCXIucXVlcnkgPSAiIjsKCQkJb3NfZmV0Y2hSZXN1bHRzKHIsdGFy Zy52YWx1ZSwwKTsKICAgIAl9CiAgCX0gZWxzZSBpZiAoa2V5cHJlc3NlZCA9PSAz OCl7IC8vIEFycm93IFVwCiAgCQlpZiAoci52aXNpYmxlKXsKICAJCQlvc19jaGFu Z2VIaWdobGlnaHQociwgci5zZWxlY3RlZCwgci5zZWxlY3RlZC0xLCB0cnVlKTsK ICAJCX0KICAJfSBlbHNlIGlmKGtleXByZXNzZWQgPT0gMjcpeyAvLyBFc2NhcGUK ICAJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuc2VhcmNoYm94KS52YWx1ZSA9 IHIub3JpZ2luYWw7CiAgCQlyLnF1ZXJ5ID0gci5vcmlnaW5hbDsKICAJCW9zX2hp ZGVSZXN1bHRzKHIpOwogIAl9IGVsc2UgaWYoci5xdWVyeSAhPSBkb2N1bWVudC5n ZXRFbGVtZW50QnlJZChyLnNlYXJjaGJveCkudmFsdWUpewogIAkJLy8gb3NfaGlk ZVJlc3VsdHMocik7IC8vIGRvbid0IHNob3cgb2xkIHN1Z2dlc3Rpb25zCiAgCX0K fQoKLyoqIFdoZW4ga2V5cyBpcyBoZWxkIGRvd24gdXNlIGEgdGltZXIgdG8gb3V0 cHV0IHJlZ3VsYXIgZXZlbnRzICovCmZ1bmN0aW9uIG9zX2V2ZW50S2V5cHJlc3Mo ZSl7Cgl2YXIgdGFyZyA9IG9zX2dldFRhcmdldChlKTsKCXZhciByID0gb3NfbWFw W3RhcmcuaWRdOwoJaWYociA9PSBudWxsKQoJCXJldHVybjsgLy8gbm90IG91ciBl dmVudAoKCXZhciBrZXlwcmVzc2VkID0gb3NfY3VyX2tleXByZXNzZWQ7CgoJb3Nf a2V5cHJlc3NlZF9jb3VudCsrOwoJb3NfcHJvY2Vzc0tleShyLGtleXByZXNzZWQs dGFyZyk7Cn0KCi8qKiBDYXRjaCB0aGUga2V5IGNvZGUgKEZpcmVmb3ggYnVnKSAg Ki8KZnVuY3Rpb24gb3NfZXZlbnRLZXlkb3duKGUpewoJaWYgKCFlKSBlID0gd2lu ZG93LmV2ZW50OwoJdmFyIHRhcmcgPSBvc19nZXRUYXJnZXQoZSk7Cgl2YXIgciA9 IG9zX21hcFt0YXJnLmlkXTsKCWlmKHIgPT0gbnVsbCkKCQlyZXR1cm47IC8vIG5v dCBvdXIgZXZlbnQKCglvc19tb3VzZV9tb3ZlZCA9IGZhbHNlOwoKCW9zX2N1cl9r ZXlwcmVzc2VkID0gKGUua2V5Q29kZSA9PSB1bmRlZmluZWQpID8gZS53aGljaCA6 IGUua2V5Q29kZTsKCW9zX2tleXByZXNzZWRfY291bnQgPSAwOwp9CgovKiogRXZl bnQ6IGxvc3Mgb2YgZm9jdXMgb2YgaW5wdXQgYm94ICovCmZ1bmN0aW9uIG9zX2V2 ZW50Qmx1cihlKXsKCXZhciB0YXJnID0gb3NfZ2V0VGFyZ2V0KGUpOwoJdmFyIHIg PSBvc19tYXBbdGFyZy5pZF07CglpZihyID09IG51bGwpCgkJcmV0dXJuOyAvLyBu b3Qgb3VyIGV2ZW50CglpZighb3NfbW91c2VfcHJlc3NlZCl7CgkJb3NfaGlkZVJl c3VsdHMocik7CgkJLy8gZm9yY2UgY2FudmFzIHRvIHN0YXkgaGlkZGVuCgkJci5z dGF5SGlkZGVuID0gdHJ1ZQoJCS8vIGNhbmNlbCBhbnkgcGVuZGluZyBmZXRjaGVz CgkJaWYob3NfdGltZXIgIT0gbnVsbCAmJiBvc190aW1lci5pZCAhPSBudWxsKQoJ CQljbGVhclRpbWVvdXQob3NfdGltZXIuaWQpOwoJCW9zX3RpbWVyID0gbnVsbAoJ fQp9CgovKiogRXZlbnQ6IGZvY3VzIChjYXRjaCBvbmx5IHdoZW4gc3RvcHBlZCkg Ki8KZnVuY3Rpb24gb3NfZXZlbnRGb2N1cyhlKXsKCXZhciB0YXJnID0gb3NfZ2V0 VGFyZ2V0KGUpOwoJdmFyIHIgPSBvc19tYXBbdGFyZy5pZF07CglpZihyID09IG51 bGwpCgkJcmV0dXJuOyAvLyBub3Qgb3VyIGV2ZW50CglyLnN0YXlIaWRkZW4gPSBm YWxzZQp9CgoKCi8qKioqKioqKioqKioqKioqKioqKgogKiAgTW91c2UgZXZlbnRz CiAqKioqKioqKioqKioqKioqKioqKi8KCi8qKiBNb3VzZSBvdmVyIHRoZSBjb250 YWluZXIgKi8KZnVuY3Rpb24gb3NfZXZlbnRNb3VzZW92ZXIoc3JjSWQsIGUpewoJ dmFyIHRhcmcgPSBvc19nZXRUYXJnZXQoZSk7Cgl2YXIgciA9IG9zX21hcFtzcmNJ ZF07CglpZihyID09IG51bGwgfHwgIW9zX21vdXNlX21vdmVkKQoJCXJldHVybjsg Ly8gbm90IG91ciBldmVudAoJdmFyIG51bSA9IG9zX2dldE51bWJlclN1ZmZpeCh0 YXJnLmlkKTsKCWlmKG51bSA+PSAwKQoJCW9zX2NoYW5nZUhpZ2hsaWdodChyLHIu c2VsZWN0ZWQsbnVtLGZhbHNlKTsKCn0KCi8qIEdldCByb3cgd2hlcmUgdGhlIGV2 ZW50IG9jY3VyZWQgKGZyb20gaXRzIGlkKSAqLwpmdW5jdGlvbiBvc19nZXROdW1i ZXJTdWZmaXgoaWQpewoJdmFyIG51bSA9IGlkLnN1YnN0cmluZyhpZC5sZW5ndGgt Mik7CglpZiggISAobnVtLmNoYXJBdCgwKSA+PSAnMCcgJiYgbnVtLmNoYXJBdCgw KSA8PSAnOScpICkKCQludW0gPSBudW0uc3Vic3RyaW5nKDEpOwoJaWYob3NfaXNO dW1iZXIobnVtKSkKCQlyZXR1cm4gcGFyc2VJbnQobnVtKTsKCWVsc2UKCQlyZXR1 cm4gLTE7Cn0KCi8qKiBTYXZlIG1vdXNlIG1vdmUgYXMgbGFzdCBhY3Rpb24gKi8K ZnVuY3Rpb24gb3NfZXZlbnRNb3VzZW1vdmUoc3JjSWQsIGUpewoJb3NfbW91c2Vf bW92ZWQgPSB0cnVlOwp9CgovKiogTW91c2UgYnV0dG9uIGhlbGQgZG93biwgcmVn aXN0ZXIgcG9zc2libGUgY2xpY2sgICovCmZ1bmN0aW9uIG9zX2V2ZW50TW91c2Vk b3duKHNyY0lkLCBlKXsKCXZhciB0YXJnID0gb3NfZ2V0VGFyZ2V0KGUpOwoJdmFy IHIgPSBvc19tYXBbc3JjSWRdOwoJaWYociA9PSBudWxsKQoJCXJldHVybjsgLy8g bm90IG91ciBldmVudAoJdmFyIG51bSA9IG9zX2dldE51bWJlclN1ZmZpeCh0YXJn LmlkKTsKCglvc19tb3VzZV9wcmVzc2VkID0gdHJ1ZTsKCWlmKG51bSA+PSAwKXsK CQlvc19tb3VzZV9udW0gPSBudW07CgkJLy8gb3NfdXBkYXRlU2VhcmNoUXVlcnko cixyLnJlc3VsdHNbbnVtXSk7Cgl9CgkvLyBrZWVwIHRoZSBmb2N1cyBvbiB0aGUg c2VhcmNoIGZpZWxkCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLnNlYXJjaGJv eCkuZm9jdXMoKTsKCglyZXR1cm4gZmFsc2U7IC8vIHByZXZlbnRzIHNlbGVjdGlv bgp9CgovKiogTW91c2UgYnV0dG9uIHJlbGVhc2VkLCBjaGVjayBmb3IgY2xpY2sg b24gc29tZSByb3cgKi8KZnVuY3Rpb24gb3NfZXZlbnRNb3VzZXVwKHNyY0lkLCBl KXsKCXZhciB0YXJnID0gb3NfZ2V0VGFyZ2V0KGUpOwoJdmFyIHIgPSBvc19tYXBb c3JjSWRdOwoJaWYociA9PSBudWxsKQoJCXJldHVybjsgLy8gbm90IG91ciBldmVu dAoJdmFyIG51bSA9IG9zX2dldE51bWJlclN1ZmZpeCh0YXJnLmlkKTsKCglpZihu dW0gPj0gMCAmJiBvc19tb3VzZV9udW0gPT0gbnVtKXsKCQlvc191cGRhdGVTZWFy Y2hRdWVyeShyLHIucmVzdWx0c1tudW1dKTsKCQlvc19oaWRlUmVzdWx0cyhyKTsK CQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLnNlYXJjaGZvcm0pLnN1Ym1pdCgp OwoJfQoJb3NfbW91c2VfcHJlc3NlZCA9IGZhbHNlOwoJLy8ga2VlcCB0aGUgZm9j dXMgb24gdGhlIHNlYXJjaCBmaWVsZAoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo ci5zZWFyY2hib3gpLmZvY3VzKCk7Cn0KCi8qKiBDaGVjayBpZiB4IGlzIGEgdmFs aWQgaW50ZWdlciAqLwpmdW5jdGlvbiBvc19pc051bWJlcih4KXsKCWlmKHggPT0g IiIgfHwgaXNOYU4oeCkpCgkJcmV0dXJuIGZhbHNlOwoJZm9yKHZhciBpPTA7aTx4 Lmxlbmd0aDtpKyspewoJCXZhciBjID0geC5jaGFyQXQoaSk7CgkJaWYoICEgKGMg Pj0gJzAnICYmIGMgPD0gJzknKSApCgkJCXJldHVybiBmYWxzZTsKCX0KCXJldHVy biB0cnVlOwp9CgoKLyoqIFdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkIGhpZGUg ZXZlcnl0aGluZywgY2FuY2VsIHVwZGF0ZXMuLi4gKi8KZnVuY3Rpb24gb3NfZXZl bnRPbnN1Ym1pdChlKXsKCXZhciB0YXJnID0gb3NfZ2V0VGFyZ2V0KGUpOwoKCW9z X2lzX3N0b3BwZWQgPSB0cnVlOwoJLy8ga2lsbCB0aW1lZCByZXF1ZXN0cwoJaWYo b3NfdGltZXIgIT0gbnVsbCAmJiBvc190aW1lci5pZCAhPSBudWxsKXsKCQljbGVh clRpbWVvdXQob3NfdGltZXIuaWQpOwoJCW9zX3RpbWVyID0gbnVsbDsKCX0KCS8v IEhpZGUgYWxsIHN1Z2dlc3Rpb25zCglmb3IoaT0wO2k8b3NfYXV0b2xvYWRfaW5w dXRzLmxlbmd0aDtpKyspewoJCXZhciByID0gb3NfbWFwW29zX2F1dG9sb2FkX2lu cHV0c1tpXV07CgkJaWYociAhPSBudWxsKXsKCQkJdmFyIGIgPSBkb2N1bWVudC5n ZXRFbGVtZW50QnlJZChyLnNlYXJjaGZvcm0pOwoJCQlpZihiICE9IG51bGwgJiYg YiA9PSB0YXJnKXsKCQkJCS8vIHNldCBxdWVyeSB2YWx1ZSBzbyB0aGUgaGFuZGxl ciB3b24ndCB0cnkgdG8gZmV0Y2ggYWRkaXRpb25hbCByZXN1bHRzCgkJCQlyLnF1 ZXJ5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5zZWFyY2hib3gpLnZhbHVl OwoJCQl9CgkJCW9zX2hpZGVSZXN1bHRzKHIpOwoJCX0KCX0KCXJldHVybiB0cnVl Owp9CgpmdW5jdGlvbiBvc19ob29rRXZlbnQoZWxlbWVudCwgaG9va05hbWUsIGhv b2tGdW5jdCkgewoJaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewoJCWVs ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihob29rTmFtZSwgaG9va0Z1bmN0LCBmYWxz ZSk7Cgl9IGVsc2UgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkgewoJCWVsZW1lbnQu YXR0YWNoRXZlbnQoIm9uIiArIGhvb2tOYW1lLCBob29rRnVuY3QpOwoJfQp9Cgov KiogSW5pdCBSZXN1bHQgb2JqZWN0cyBhbmQgZXZlbnQgaGFuZGxlcnMgKi8KZnVu Y3Rpb24gb3NfaW5pdEhhbmRsZXJzKG5hbWUsIGZvcm1uYW1lLCBlbGVtZW50KXsK CXZhciByID0gbmV3IG9zX1Jlc3VsdHMobmFtZSwgZm9ybW5hbWUpOwoJLy8gZXZl bnQgaGFuZGxlcgoJb3NfaG9va0V2ZW50KGVsZW1lbnQsICJrZXl1cCIsIGZ1bmN0 aW9uKGV2ZW50KSB7IG9zX2V2ZW50S2V5dXAoZXZlbnQpOyB9KTsKCW9zX2hvb2tF dmVudChlbGVtZW50LCAia2V5ZG93biIsIGZ1bmN0aW9uKGV2ZW50KSB7IG9zX2V2 ZW50S2V5ZG93bihldmVudCk7IH0pOwoJb3NfaG9va0V2ZW50KGVsZW1lbnQsICJr ZXlwcmVzcyIsIGZ1bmN0aW9uKGV2ZW50KSB7IG9zX2V2ZW50S2V5cHJlc3MoZXZl bnQpOyB9KTsKCW9zX2hvb2tFdmVudChlbGVtZW50LCAiYmx1ciIsIGZ1bmN0aW9u KGV2ZW50KSB7IG9zX2V2ZW50Qmx1cihldmVudCk7IH0pOwoJb3NfaG9va0V2ZW50 KGVsZW1lbnQsICJmb2N1cyIsIGZ1bmN0aW9uKGV2ZW50KSB7IG9zX2V2ZW50Rm9j dXMoZXZlbnQpOyB9KTsKCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJhdXRvY29tcGxl dGUiLCJvZmYiKTsKCS8vIHN0b3BwaW5nIGhhbmRsZXIKCW9zX2hvb2tFdmVudChk b2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtbmFtZSksICJzdWJtaXQiLCBmdW5j dGlvbihldmVudCl7IHJldHVybiBvc19ldmVudE9uc3VibWl0KGV2ZW50KTsgfSk7 Cglvc19tYXBbbmFtZV0gPSByOwoJLy8gdG9nZ2xlIGxpbmsKCWlmKGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKHIudG9nZ2xlKSA9PSBudWxsKXsKCQkvLyBUT0RPOiBk aXNhYmxlIHRoaXMgd2hpbGUgd2UgZmlndXJlIG91dCBhIHdheSBmb3IgdGhpcyB0 byB3b3JrIGluIGFsbCBicm93c2VycwoJCS8qIGlmKG5hbWU9PSdzZWFyY2hJbnB1 dCcpewoJCQkvLyBzcGVjaWFsIGNhc2U6IHBsYWNlIGFib3ZlIHRoZSBtYWluIHNl YXJjaCBib3gKCQkJdmFyIHQgPSBvc19jcmVhdGVUb2dnbGUociwib3Mtc3VnZ2Vz dC10b2dnbGUiKTsKCQkJdmFyIHNlYXJjaEJvZHkgPSBkb2N1bWVudC5nZXRFbGVt ZW50QnlJZCgnc2VhcmNoQm9keScpOwoJCQl2YXIgZmlyc3QgPSBzZWFyY2hCb2R5 LnBhcmVudE5vZGUuZmlyc3RDaGlsZC5uZXh0U2libGluZy5hcHBlbmRDaGlsZCh0 KTsKCQl9IGVsc2V7CgkJCS8vIGRlZmF1bHQ6IHBsYWNlIGJlbG93IHNlYXJjaCBi b3ggdG8gdGhlIHJpZ2h0CgkJCXZhciB0ID0gb3NfY3JlYXRlVG9nZ2xlKHIsIm9z LXN1Z2dlc3QtdG9nZ2xlLWRlZiIpOwoJCQl2YXIgdG9wID0gZWxlbWVudC5vZmZz ZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodDsKCQkJdmFyIGxlZnQgPSBlbGVt ZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoOwoJCQl0LnN0eWxl LnBvc2l0aW9uID0gImFic29sdXRlIjsKCQkJdC5zdHlsZS50b3AgPSB0b3AgKyAi cHgiOwoJCQl0LnN0eWxlLmxlZnQgPSBsZWZ0ICsgInB4IjsKCQkJZWxlbWVudC5w YXJlbnROb2RlLmFwcGVuZENoaWxkKHQpOwoJCQkvLyBvbmx5IG5vdyB3aWR0aCBn ZXRzIGNhbGN1bGF0ZWQsIHNoaWZ0IHJpZ2h0CgkJCWxlZnQgLT0gdC5vZmZzZXRX aWR0aDsKCQkJdC5zdHlsZS5sZWZ0ID0gbGVmdCArICJweCI7CgkJCXQuc3R5bGUu dmlzaWJpbGl0eSA9ICJ2aXNpYmxlIjsKCQl9ICovCgl9Cgp9CgovKiogUmV0dXJu IHRoZSBzcGFuIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgdG9nZ2xlIGxpbmsg Ki8KZnVuY3Rpb24gb3NfY3JlYXRlVG9nZ2xlKHIsY2xhc3NOYW1lKXsKCXZhciB0 ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwoJdC5jbGFzc05hbWUg PSBjbGFzc05hbWU7Cgl0LnNldEF0dHJpYnV0ZSgiaWQiLCByLnRvZ2dsZSk7Cgl2 YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKCWxpbmsuc2V0 QXR0cmlidXRlKCJocmVmIiwiamF2YXNjcmlwdDp2b2lkKDApOyIpOwoJbGluay5v bmNsaWNrID0gZnVuY3Rpb24oKXsgb3NfdG9nZ2xlKHIuc2VhcmNoYm94LHIuc2Vh cmNoZm9ybSkgfTsKCXZhciBtc2cgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh3 Z01XU3VnZ2VzdE1lc3NhZ2VzWzBdKTsKCWxpbmsuYXBwZW5kQ2hpbGQobXNnKTsK CXQuYXBwZW5kQ2hpbGQobGluayk7CglyZXR1cm4gdDsKfQoKLyoqIENhbGwgd2hl biB1c2VyIGNsaWNrcyBvbiBzb21lIG9mIHRoZSB0b2dnbGUgbGlua3MgKi8KZnVu Y3Rpb24gb3NfdG9nZ2xlKGlucHV0SWQsZm9ybU5hbWUpewoJciA9IG9zX21hcFtp bnB1dElkXTsKCXZhciBtc2cgPSAnJzsKCWlmKHIgPT0gbnVsbCl7CgkJb3NfZW5h YmxlU3VnZ2VzdGlvbnNPbihpbnB1dElkLGZvcm1OYW1lKTsKCQlyID0gb3NfbWFw W2lucHV0SWRdOwoJCW1zZyA9IHdnTVdTdWdnZXN0TWVzc2FnZXNbMF07Cgl9IGVs c2V7CgkJb3NfZGlzYWJsZVN1Z2dlc3Rpb25zT24oaW5wdXRJZCxmb3JtTmFtZSk7 CgkJbXNnID0gd2dNV1N1Z2dlc3RNZXNzYWdlc1sxXTsKCX0KCS8vIGNoYW5nZSBt ZXNzYWdlCgl2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIudG9n Z2xlKS5maXJzdENoaWxkOwoJbGluay5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3Jl YXRlVGV4dE5vZGUobXNnKSxsaW5rLmZpcnN0Q2hpbGQpOwp9CgovKiogQ2FsbCB0 aGlzIHRvIGVuYWJsZSBzdWdnZXN0aW9ucyBvbiBpbnB1dCAoaWQ9aW5wdXRJZCks IG9uIGEgZm9ybSAobmFtZT1mb3JtTmFtZSkgKi8KZnVuY3Rpb24gb3NfZW5hYmxl U3VnZ2VzdGlvbnNPbihpbnB1dElkLCBmb3JtTmFtZSl7Cglvc19pbml0SGFuZGxl cnMoIGlucHV0SWQsIGZvcm1OYW1lLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChp bnB1dElkKSApOwp9CgovKiogQ2FsbCB0aGlzIHRvIGRpc2FibGUgc3VnZ2VzdGlv cyBvbiBpbnB1dCBib3ggKGlkPWlucHV0SWQpICovCmZ1bmN0aW9uIG9zX2Rpc2Fi bGVTdWdnZXN0aW9uc09uKGlucHV0SWQpewoJciA9IG9zX21hcFtpbnB1dElkXTsK CWlmKHIgIT0gbnVsbCl7CgkJLy8gY2FuY2VsL2hpZGUgcmVzdWx0cwoJCW9zX3Rp bWVyID0gbnVsbDsKCQlvc19oaWRlUmVzdWx0cyhyKTsKCQkvLyB0dXJuIGF1dG9j b21wbGV0ZSBvbiAhCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCku c2V0QXR0cmlidXRlKCJhdXRvY29tcGxldGUiLCJvbiIpOwoJCS8vIHJlbW92ZSBk ZXNjcmlwdG9yCgkJb3NfbWFwW2lucHV0SWRdID0gbnVsbDsKCX0KCQoJLy8gUmVt b3ZlIHRoZSBlbGVtZW50IGZyb20gdGhlIG9zX2F1dG9sb2FkXyogYXJyYXlzCgl2 YXIgaW5kZXggPSBvc19hdXRvbG9hZF9pbnB1dHMuaW5kZXhPZihpbnB1dElkKTsK CWlmICggaW5kZXggPj0gMCApCgkJb3NfYXV0b2xvYWRfaW5wdXRzW2luZGV4XSA9 IG9zX2F1dG9sb2FkX2Zvcm1zW2luZGV4XSA9ICcnOwp9CgovKiogSW5pdGlhbGl6 YXRpb24sIGNhbGwgdXBvbiBwYWdlIG9ubG9hZCAqLwpmdW5jdGlvbiBvc19NV1N1 Z2dlc3RJbml0KCkgewoJZm9yKGk9MDtpPG9zX2F1dG9sb2FkX2lucHV0cy5sZW5n dGg7aSsrKXsKCQl2YXIgaWQgPSBvc19hdXRvbG9hZF9pbnB1dHNbaV07CgkJdmFy IGZvcm0gPSBvc19hdXRvbG9hZF9mb3Jtc1tpXTsKCQllbGVtZW50ID0gZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7CgkJaWYoZWxlbWVudCAhPSBudWxsKQoJ CQlvc19pbml0SGFuZGxlcnMoaWQsZm9ybSxlbGVtZW50KTsKCX0KfQoKaG9va0V2 ZW50KCJsb2FkIiwgb3NfTVdTdWdnZXN0SW5pdCk7Cg== ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=centralnotice.js Content-Type: text/javascript; charset=utf-8; name=centralnotice.js Content-Location: http://upload.wikimedia.org/centralnotice/wikibooks/en/centralnotice.js?257z26 Content-Transfer-Encoding: 8bit function toggleNotice() { var notice = document.getElementById('centralNotice'); if (!wgNoticeToggleState) { notice.className = notice.className.replace('collapsed', 'expanded'); toggleNoticeCookie('0'); } else { notice.className = notice.className.replace('expanded', 'collapsed'); toggleNoticeCookie('1'); } wgNoticeToggleState = !wgNoticeToggleState; } function toggleNoticeStyle(elems, display) { if(elems) for(var i=0;i' + wgNotice+'
'; ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=index.js Content-Type: text/javascript; charset=UTF-8; name=index.js Content-Location: http://en.wikibooks.org/w/index.php?title=-&action=raw&gen=js&useskin=monobook&urid=257z26 Content-Transfer-Encoding: 8bit /* generated javascript */ var skin = 'monobook'; var stylepath = 'http://bits.wikimedia.org/skins-1.5'; /* MediaWiki:Common.js */ // Common javascript code which effects everyone // hasClass() // Description: Uses regular expressions and caching for better performance. // Maintainers: User:Mike Dillon, User:R. Koot, User:SG var hasClass = (function () { var reCache = {}; return function (element, className) { return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className); }; })(); // for backwards compatibility var addLoadEvent = addOnloadHook; var import_script = importScript; var import_style = importStylesheet; // book name var wgBookName = wgPageName.split("/", 1)[0] || wgPageName; wgBookName = wgBookName.split(':', 2).join(":"); // Provides an easy way to disable load dependent features function delLoadEvent(func) { for (var i = 0; i < onloadFuncts.length; i++) { if (onloadFuncts[i] == func) onloadFuncts.splice(i, 1); } } function get_query_value(query, name) { if (typeof query != "string" || typeof name != "string") return ""; var value = query.match('[&?]' + name + '=([^&]*)'); if (value) return decodeURIComponent(value[1]); else return ""; } // cross-browser event attachment (John Resig) // http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html function addEvent(obj, type, fn) { if (obj.addEventListener) obj.addEventListener( type, fn, false ); else if (obj.attachEvent) { obj["e"+type+fn] = fn; obj[type+fn] = function() { obj["e"+type+fn]( window.event ); } obj.attachEvent( "on"+type, obj[type+fn] ); } } // cross-browser XMLHtttpRequest compatibility if (typeof XMLHttpRequest == "undefined") XMLHttpRequest = function() { try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch(e) {}; try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(e) {}; try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}; try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}; throw new Error("This browser does not support XMLHttpRequest or XMLHTTP."); }; //Adds a dismissable message to the watchlist if (wgCanonicalSpecialPageName == "Watchlist") importScript('MediaWiki:Common.js/WatchlistNotice.js'); // Removes the default no-license option for image uploads. // All new image uploads must be tagged with a license or nld function remove_no_license() { if (wgPageName != "Special:Upload") return; var license = document.getElementById("wpLicense"); if (!license) return; var options = license.getElementsByTagName("option"); if (!options) return; license.removeChild(options[0]); } addOnloadHook(remove_no_license); // import additional scripts // import_script('MediaWiki:Common.js/ExtraTools.js'); import_script('MediaWiki:Common.js/Navigation.js'); import_script('MediaWiki:Common.js/NavigationTabs.js'); import_script('MediaWiki:Common.js/Displaytitle.js'); import_script('MediaWiki:Common.js/RandomBook.js'); import_script('MediaWiki:Common.js/Edittools.js'); // adds buttons to the edit toolbar if (mwCustomEditButtons) import_script('MediaWiki:Common.js/EditToolbar.js'); //Search within a book using Google// // 0 - Main / 102 - Cookbook / 110 - Wikijunior if ( wgNamespaceNumber == 0 || wgNamespaceNumber == 102 || wgNamespaceNumber == 110) importScript('MediaWiki:Common.js/BookSearch.js'); // Import book CSS wgBookCSS= wgPageName.split("/", 1)[0]; import_style('MediaWiki:Common.css/' + wgBookCSS); // End of Common.js /* MediaWiki:Monobook.js */ /* See also: [[MediaWiki:Common.js]]
*/

/* Functions for adding links to the personal links section and the toolbox*/
function AddPersonalLink(link, text, tag, ibefore)
{
  var li = document.createElement( 'li' );
  li.id = tag;
  var a = document.createElement( 'a' );
  a.appendChild( document.createTextNode( text ) ); 
  a.href = link;
  li.appendChild( a );
  if ( ! ibefore ) // append to end (right) of list
  {
     document.getElementById( 'pt-logout' ).parentNode.appendChild( li );
  }
  else
  {
      var before = document.getElementById( ibefore );
      before.appendChild( li, before );
  }
}

function AddToolboxLink(text, href, onclick, linkid) {
  var tb = document.getElementById('p-tb').getElementsByTagName('ul')[0];
  
  var link = document.createElement('a');
  link.onclick = onclick;
  link.href = href;
  link.appendChild(document.createTextNode(text));

  var li = document.createElement('li');
  li.id = linkid;
  li.appendChild(link);

  tb.insertBefore(li, tb.firstChild);
  return;
}
/*
*/ ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=flaggedrevs.js Content-Type: application/x-javascript; charset=UTF-8; name=flaggedrevs.js Content-Location: http://en.wikibooks.org/w/extensions/FlaggedRevs/flaggedrevs.js?60 Content-Transfer-Encoding: Base64 LyogLS0gKGMpIEFhcm9uIFNjaHVseiwgRGFuaWVsIEFybm9sZCAyMDA4ICovCgov KiBFdmVyeSB0aW1lIHlvdSBjaGFuZ2UgdGhpcyBKUyBwbGVhc2UgYnVtcCAkd2dG bGFnZ2VkUmV2U3R5bGVWZXJzaW9uIGluIEZsYWdnZWRSZXZzLnBocCAqLwoKLyog SGlkZSByYXRpbmcgY2x1dHRlciAqLwpmdW5jdGlvbiBlbmFibGVfc2hvd2hpZGUo KSB7Cgl2YXIgdG9nZ2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ213LXJl dmlzaW9udG9nZ2xlJyk7CglpZiggIXRvZ2dsZSApIHJldHVybjsKCXRvZ2dsZS5z dHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7Cgl2YXIgcmF0aW5ncyA9IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCdtdy1yZXZpc2lvbnJhdGluZ3MnKTsKCWlmKCAhcmF0 aW5ncyApIHJldHVybjsKCXJhdGluZ3Muc3R5bGUuZGlzcGxheSA9ICdub25lJzsK fQoKLyogVG9nZ2xlcyByYXRpbmdzICovCmZ1bmN0aW9uIHRvZ2dsZVJldlJhdGlu Z3MoKSB7Cgl2YXIgcmF0aW5ncyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdt dy1yZXZpc2lvbnJhdGluZ3MnKTsKCWlmKCAhcmF0aW5ncyApIHJldHVybjsKCWlm KCByYXRpbmdzLnN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnICkgewoJCXJhdGluZ3Mu c3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOwoJfSBlbHNlIHsKCQlyYXRpbmdzLnN0 eWxlLmRpc3BsYXkgPSAnbm9uZSc7Cgl9Cn0KCi8qCiogYSkgRGlzYWJsZSBzdWJt aXQgaW4gY2FzZSBvZiBpbnZhbGlkIGlucHV0LgoqIGIpIFVwZGF0ZSBjb2xvcnMg d2hlbiBzZWxlY3QgY2hhbmdlcyAoT3BlcmEgYWxyZWFkeSBkb2VzIHRoaXMpLgoq IGMpIEFsc28gcmVtb3ZlIGNvbW1lbnQgYm94IGNsdXR0ZXIgaW4gY2FzZSBvZiBp bnZhbGlkIGlucHV0LgoqLwpmdW5jdGlvbiB1cGRhdGVSYXRpbmdGb3JtKCkgewoJ dmFyIHJhdGluZ2Zvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXctcmF0 aW5nc2VsZWN0cycpOwoJaWYoICFyYXRpbmdmb3JtICkgcmV0dXJuOwoJdmFyIGRp c2FibGVkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZyLXJhdGluZy1jb250 cm9scy1kaXNhYmxlZCcpOwoJaWYoIGRpc2FibGVkICkgcmV0dXJuOwoKCXZhciBx dWFsaXR5ID0gdHJ1ZTsKCXZhciBhbGx6ZXJvID0gdHJ1ZTsKCXZhciBzb21lemVy byA9IGZhbHNlOwoKCWZvciggdGFnIGluIHdnRmxhZ2dlZFJldnNQYXJhbXMudGFn cyApIHsKCQl2YXIgY29udHJvbE5hbWUgPSAid3AiICsgdGFnOwoJCXZhciBsZXZl bHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShjb250cm9sTmFtZSk7CgkJ dmFyIHNlbGVjdGVkbGV2ZWwgPSAwOyAvLyBkZWZhdWx0CgoJCWlmKCBsZXZlbHNb MF0ubm9kZU5hbWUgPT0gJ1NFTEVDVCcgKSB7CgkJCXNlbGVjdGVkbGV2ZWwgPSBs ZXZlbHNbMF0uc2VsZWN0ZWRJbmRleDsKCQkJLy8gVXBkYXRlIGNvbG9yLiBPcGVy YSBkb2VzIHRoaXMgYWxyZWFkeSwgYW5kIGRvaW5nIHNvCgkJCS8vIHNlZW1zIHRv IGtpbGwgY3VzdG9tIHByZXR0eSBvcGVyYSBza2luIGZvcm0gc3R5bGluZy4KCQkJ aWYoIG5hdmlnYXRvci5hcHBOYW1lICE9ICdPcGVyYScpIHsKCQkJCXZhbHVlID0g bGV2ZWxzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvcHRpb24nKVtzZWxlY3Rl ZGxldmVsXS52YWx1ZTsKCQkJCWxldmVsc1swXS5jbGFzc05hbWUgPSAnZnItcmF0 aW5nLW9wdGlvbi0nICsgdmFsdWU7CgkJCX0KCQl9IGVsc2UgaWYoIGxldmVsc1sw XS50eXBlID09ICdyYWRpbycgKSB7CgkJCWZvciggaSA9IDA7IGkgPCBsZXZlbHMu bGVuZ3RoOyBpKysgKSB7CgkJCQlpZiggbGV2ZWxzW2ldLmNoZWNrZWQgKSB7CgkJ CQkJc2VsZWN0ZWRsZXZlbCA9IGk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9 IGVsc2UgaWYoIGxldmVsc1swXS50eXBlID09ICdjaGVja2JveCcgKSB7CgkJCXNl bGVjdGVkbGV2ZWwgPSAobGV2ZWxzWzBdLmNoZWNrZWQpID8gMTogMDsKCQl9IGVs c2UgewoJCQlyZXR1cm47IC8vIGVycm9yOiBzaG91bGQgbm90IGhhcHBlbgoJCX0K CgkJLy8gR2V0IHF1YWxpdHkgbGV2ZWwgZm9yIHRoaXMgdGFnCgkJcXVhbGl0eUxl dmVsID0gd2dGbGFnZ2VkUmV2c1BhcmFtcy50YWdzW3RhZ107CgoJCWlmKCBzZWxl Y3RlZGxldmVsIDwgcXVhbGl0eUxldmVsICkgewoJCQlxdWFsaXR5ID0gZmFsc2U7 IC8vIG5vdCBhIHF1YWxpdHkgcmV2aWV3CgkJfQoJCWlmKCBzZWxlY3RlZGxldmVs ID4gMCApIHsKCQkJYWxsemVybyA9IGZhbHNlOwoJCX0gZWxzZSB7CgkJCXNvbWV6 ZXJvID0gdHJ1ZTsKCQl9Cgl9CgkvLyBTaG93IG5vdGUgYm94IG9ubHkgZm9yIHF1 YWxpdHkgcmV2cwoJdmFyIG5vdGVib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgnbXctbm90ZWJveCcpOwoJaWYoIG5vdGVib3ggKSB7CgkJbm90ZWJveC5zdHls ZS5kaXNwbGF5ID0gcXVhbGl0eSA/ICdpbmxpbmUnIDogJ25vbmUnOwoJfQoJLy8g SWYgb25seSBhIGZldyBsZXZlbHMgYXJlIHplcm8sIGRvbid0IHNob3cgc3VibWl0 IGxpbmsKCXZhciBzdWJtaXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Vi bWl0cmV2aWV3Jyk7CglzdWJtaXQuZGlzYWJsZWQgPSAoIHNvbWV6ZXJvICYmICFh bGx6ZXJvICkgPyAnZGlzYWJsZWQnIDogJyc7CgkvLyBDbGVhciBub3RlIGJveCBk YXRhIGlmIG5vdCBzaG93bgoJdmFyIG5vdGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoJ3dwTm90ZXMnKTsKCWlmKCBub3RlcyApIHsKCQlub3Rlcy52YWx1ZSA9 IHF1YWxpdHkgPyBub3Rlcy52YWx1ZSA6ICcnOwoJfQp9CgphZGRPbmxvYWRIb29r KGVuYWJsZV9zaG93aGlkZSk7CmFkZE9ubG9hZEhvb2sodXBkYXRlUmF0aW5nRm9y bSk7CgovLyBkZXBlbmRlbmNpZXM6Ci8vICogYWpheC5qczoKICAvKmV4dGVybiBz YWpheF9pbml0X29iamVjdCwgc2FqYXhfZG9fY2FsbCAqLwovLyAqIHdpa2liaXRz LmpzOgogIC8qZXh0ZXJuIGhvb2tFdmVudCwganNNc2cgKi8KLy8gVGhlc2Ugc2hv dWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCBpbiB0aGUgZ2VuZXJhdGVkIGpzCmlm KCB0eXBlb2Ygd2dBamF4UmV2aWV3ID09PSAidW5kZWZpbmVkIiB8fCAhd2dBamF4 UmV2aWV3ICkgewoJd2dBamF4UmV2aWV3ID0gewoJCXNlbmRpbmdNc2c6ICJTdWJt aXR0aW5nLi4uIiwKCQlzZW50TXNnT2s6ICJSZXZpZXcgY29tcGxldGUhIiwKCQlz ZW50TXNnQmFkOiAiUmV2aWV3IGZhaWxlZCEiLAoJCWFjdGlvbmNvbXBsZXRlOiAi QWN0aW9uIGNvbXBsZXRlIiwKCQlhY3Rpb25mYWlsZWQ6ICJBY3Rpb24gZmFpbGVk IgoJfTsKfQoKd2dBamF4UmV2aWV3LnN1cHBvcnRlZCA9IHRydWU7IC8vIHN1cHBv cnRlZCBvbiBjdXJyZW50IHBhZ2UgYW5kIGJ5IGJyb3dzZXIKd2dBamF4UmV2aWV3 LmlucHJvZ3Jlc3MgPSBmYWxzZTsgLy8gYWpheCByZXF1ZXN0IGluIHByb2dyZXNz CndnQWpheFJldmlldy50aW1lb3V0SUQgPSBudWxsOyAvLyBzZWUgd2dBamF4UmV2 aWV3LmFqYXhDYWxsCgp3Z0FqYXhSZXZpZXcuYWpheENhbGwgPSBmdW5jdGlvbigp IHsKCWlmKCAhd2dBamF4UmV2aWV3LnN1cHBvcnRlZCApIHsKCQlyZXR1cm4gdHJ1 ZTsKCX0gZWxzZSBpZiggd2dBamF4UmV2aWV3LmlucHJvZ3Jlc3MgKSB7CgkJcmV0 dXJuIGZhbHNlOwoJfQoJaWYoICF3ZlN1cHBvcnRzQWpheCgpICkgewoJCS8vIExh enkgaW5pdGlhbGl6YXRpb24gc28gd2UgZG9uJ3QgdG9zcyB1cAoJCS8vIEFjdGl2 ZVggd2FybmluZ3Mgb24gaW5pdGlhbCBwYWdlIGxvYWQKCQkvLyBmb3IgSUUgNiB1 c2VycyB3aXRoIHNlY3VyaXR5IHNldHRpbmdzLgoJCXdnQWpheFJldmlldy5zdXBw b3J0ZWQgPSBmYWxzZTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCXZhciBmb3JtID0gZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm13LXJldmlld2Zvcm0iKTsKCXZhciBub3Rl cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3cE5vdGVzIik7Cgl2YXIgcmVh c29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndwUmVhc29uIik7CglpZigg IWZvcm0gKSB7CgkJcmV0dXJuIGZhbHNlOwoJfQoJd2dBamF4UmV2aWV3LmlucHJv Z3Jlc3MgPSB0cnVlOwoJLy8gQnVpbGQgdXAgYXJndW1lbnRzCgl2YXIgYXJncyA9 IFtdOwoJdmFyIGlucHV0cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlu cHV0Iik7Cglmb3IoIHZhciBpPTA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsK CQkvLyBEaWZmZXJlbnQgaW5wdXQgdHlwZXMgbWF5IG9jY3VyIGRlcGVuZGluZyBv biB0YWdzLi4uCgkJaWYoIGlucHV0c1tpXS5uYW1lID09ICJ0aXRsZSIgfHwgaW5w dXRzW2ldLm5hbWUgPT0gImFjdGlvbiIgKSB7CgkJCS8vIE5vIG5lZWQgdG8gc2Vu ZCB0aGVzZS4uLgoJCX0gZWxzZSBpZiggaW5wdXRzW2ldLnR5cGUgPT0gInN1Ym1p dCIgKSB7CgkJCWlucHV0c1tpXS52YWx1ZSA9IHdnQWpheFJldmlldy5zZW5kaW5n TXNnOwoJCX0gZWxzZSBpZiggaW5wdXRzW2ldLnR5cGUgPT0gImNoZWNrYm94IiAp IHsKCQkJYXJncy5wdXNoKCBpbnB1dHNbaV0ubmFtZSArICJ8IiArIChpbnB1dHNb aV0uY2hlY2tlZCA/IDEgOiAwKSApOwoJCX0gZWxzZSBpZiggaW5wdXRzW2ldLnR5 cGUgIT0gInJhZGlvIiB8fCBpbnB1dHNbaV0uY2hlY2tlZCApIHsKCQkJYXJncy5w dXNoKCBpbnB1dHNbaV0ubmFtZSArICJ8IiArIGlucHV0c1tpXS52YWx1ZSApOwoJ CX0KCQlpbnB1dHNbaV0uZGlzYWJsZWQgPSAiZGlzYWJsZWQiOwoJfQoJaWYoIG5v dGVzICkgewoJCWFyZ3MucHVzaCggbm90ZXMubmFtZSArICJ8IiArIG5vdGVzLnZh bHVlICk7CgkJbm90ZXMuZGlzYWJsZWQgPSAiZGlzYWJsZWQiOwoJfQoJdmFyIHNl bGVjdHMgPSBmb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKTsKCWZv ciggdmFyIGk9MDsgaSA8IHNlbGVjdHMubGVuZ3RoOyBpKyspIHsKCQkvLyBHZXQg dGhlIHNlbGVjdGVkIHRhZyBsZXZlbC4uLgoJCWlmKCBzZWxlY3RzW2ldLnNlbGVj dGVkSW5kZXggPj0gMCApIHsKCQkJdmFyIHNvcHRpb24gPSBzZWxlY3RzW2ldLmdl dEVsZW1lbnRzQnlUYWdOYW1lKCJvcHRpb24iKVtzZWxlY3RzW2ldLnNlbGVjdGVk SW5kZXhdOwoJCQlhcmdzLnB1c2goIHNlbGVjdHNbaV0ubmFtZSArICJ8IiArIHNv cHRpb24udmFsdWUgKTsKCQl9CgkJc2VsZWN0c1tpXS5kaXNhYmxlZCA9ICJkaXNh YmxlZCI7Cgl9CgkvLyBTZW5kIQoJdmFyIG9sZCA9IHNhamF4X3JlcXVlc3RfdHlw ZTsKCXNhamF4X3JlcXVlc3RfdHlwZSA9ICJQT1NUIjsKCXNhamF4X2RvX2NhbGwo ICJSZXZpc2lvblJldmlldzo6QWpheFJldmlldyIsIGFyZ3MsIHdnQWpheFJldmll dy5wcm9jZXNzUmVzdWx0ICk7CglzYWpheF9yZXF1ZXN0X3R5cGUgPSBvbGQ7Cgkv LyBJZiB0aGUgcmVxdWVzdCBpc24ndCBkb25lIGluIDMwIHNlY29uZHMsIGFsbG93 IHVzZXIgdG8gdHJ5IGFnYWluCgl3Z0FqYXhSZXZpZXcudGltZW91dElEID0gd2lu ZG93LnNldFRpbWVvdXQoCgkJZnVuY3Rpb24oKSB7IHdnQWpheFJldmlldy5pbnBy b2dyZXNzID0gZmFsc2U7IHdnQWpheFJldmlldy51bmxvY2tGb3JtKCk7IH0sCgkJ MzAwMDAKCSk7CglyZXR1cm4gZmFsc2U7Cn07Cgp3Z0FqYXhSZXZpZXcudW5sb2Nr Rm9ybSA9IGZ1bmN0aW9uKCkgewoJdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVt ZW50QnlJZCgibXctcmV2aWV3Zm9ybSIpOwoJdmFyIHN1Ym1pdCA9IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCJzdWJtaXRyZXZpZXciKTsKCXZhciBub3RlcyA9IGRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3cE5vdGVzIik7Cgl2YXIgcmVhc29uID0g ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndwUmVhc29uIik7CglpZiggIWZvcm0g fHwgIXN1Ym1pdCApIHsKCQlyZXR1cm4gZmFsc2U7Cgl9CglzdWJtaXQuZGlzYWJs ZWQgPSAiIjsKCXZhciBpbnB1dHMgPSBmb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1l KCJpbnB1dCIpOwoJZm9yKCB2YXIgaT0wOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsr KSB7CgkJaW5wdXRzW2ldLmRpc2FibGVkID0gIiI7Cgl9CglpZiggbm90ZXMgKSB7 CgkJbm90ZXMuZGlzYWJsZWQgPSAiIjsKCX0KCWlmKCByZWFzb24gKSB7CgkJcmVh c29uLmRpc2FibGVkID0gIiI7Cgl9Cgl2YXIgc2VsZWN0cyA9IGZvcm0uZ2V0RWxl bWVudHNCeVRhZ05hbWUoInNlbGVjdCIpOwoJZm9yKCB2YXIgaT0wOyBpIDwgc2Vs ZWN0cy5sZW5ndGg7IGkrKykgewoJCXNlbGVjdHNbaV0uZGlzYWJsZWQgPSAiIjsK CX0KfTsKCndnQWpheFJldmlldy5wcm9jZXNzUmVzdWx0ID0gZnVuY3Rpb24ocmVx dWVzdCkgewoJaWYoICF3Z0FqYXhSZXZpZXcuc3VwcG9ydGVkICkgewoJCXJldHVy bjsKCX0KCXZhciByZXNwb25zZSA9IHJlcXVlc3QucmVzcG9uc2VUZXh0OwoJaWYo IG1zZyA9IHJlc3BvbnNlLnN1YnN0cig2KSApIHsKCQlqc01zZyggbXNnLCAncmV2 aWV3JyApOyAvLyBzdWNjZXNzIG5vdGljZQoJCXdpbmRvdy5zY3JvbGwoMCwwKTsg Ly8gc2Nyb2xsIHVwIHRvIG5vdGljZQoJCXRhZ0JveCA9IGRvY3VtZW50LmdldEVs ZW1lbnRCeUlkKCdtdy1yZXZpc2lvbnRhZycpOwoJCWlmKCB0YWdCb3ggKSB0YWdC b3guc3R5bGUuZGlzcGxheSA9ICdub25lJzsgLy8gcmVtb3ZlIHRhZyBmcm9tIGRy YWZ0Cgl9Cgl3Z0FqYXhSZXZpZXcuaW5wcm9ncmVzcyA9IGZhbHNlOwoJaWYoIHdn QWpheFJldmlldy50aW1lb3V0SUQgKSB7CgkJd2luZG93LmNsZWFyVGltZW91dCh3 Z0FqYXhSZXZpZXcudGltZW91dElEKTsKCX0KCXZhciBzdWJtaXQgPSBkb2N1bWVu dC5nZXRFbGVtZW50QnlJZCgic3VibWl0cmV2aWV3Iik7CglpZiggcmVzcG9uc2Uu aW5kZXhPZignPHN1YyM+JykgPT0gMCApIHsKCQlkb2N1bWVudC50aXRsZSA9IHdn QWpheFJldmlldy5hY3Rpb25jb21wbGV0ZTsKCQlpZiggc3VibWl0ICkgc3VibWl0 LnZhbHVlID0gd2dBamF4UmV2aWV3LnNlbnRNc2dPazsKCX0gZWxzZSB7CgkJZG9j dW1lbnQudGl0bGUgPSB3Z0FqYXhSZXZpZXcuYWN0aW9uZmFpbGVkOwoJCWlmKCBz dWJtaXQgKSBzdWJtaXQudmFsdWUgPSB3Z0FqYXhSZXZpZXcuc2VudE1zZ0JhZDsK CX0KCXdnQWpheFJldmlldy51bmxvY2tGb3JtKCk7Cn07Cgp3Z0FqYXhSZXZpZXcu b25Mb2FkID0gZnVuY3Rpb24oKSB7Cgl2YXIgc3VibWl0ID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoInN1Ym1pdHJldmlldyIpOwoJaWYoIHN1Ym1pdCApIHsKCQlz dWJtaXQub25jbGljayA9IHdnQWpheFJldmlldy5hamF4Q2FsbDsKCX0KfTsKCmhv b2tFdmVudCgibG9hZCIsIHdnQWpheFJldmlldy5vbkxvYWQpOwo= ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=40px-Nuvola_apps_bookcase.svg.png Content-Type: image/png; name=40px-Nuvola_apps_bookcase.svg.png Content-Location: http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Nuvola_apps_bookcase.svg/40px-Nuvola_apps_bookcase.svg.png Content-Transfer-Encoding: Base64 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 YII= ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline Content-Type: image/png Content-Location: http://upload.wikimedia.org/wikibooks/en/b/bc/Wiki.png Content-Transfer-Encoding: Base64 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 BJfWNP3dzdyyeevrvxOPL0/DYE/p/PcaLHzP5Bx852R8677OzDzvaIN/yqvVdXDz 1Q8wHqufXuvWaK797/Dm9fReCTpsVAnvTEGVh6dXePp8T69M31zPW9x7hjjfo7j3 mIztem0Up7t7eo+U3aen96TM2/QJYOYf9vD07o3T831Vy5OdDqolruOuNTRw99UL HD0AzQODZ8ptIABQ0SGcddfmrRtkNpCF/ZaF+cdk1kt199P9pulmeMsEJF/9aWaZ dSbn7jv3I5gWw8x/6NFAVz1tnr4N/H9F/jgNVzVNV71tTzhCQAIKjHjAZF7RWh+J 80i3JKvngmm3M+b79Ge2e42Zvliyz3hxHhg+zKSyPb0CJftcqNGkXfXuxbzKsPM8 Sng1swIOUbEarcE944o3VIJptxSsdwc9iam3MPSF6c8tr2uIRq9kCQ73RoZPYN4p Fuh3fPU/Gi9SX0MN+P+FpX1pqi+030vW7p4+3ZgKT9V8Xj194x7FvRpLDCXk8/RJ f5zNo1jt/7Lz3Et4l1cDBxh7rGR/80QwrIbDz9AFXTtcbT+D293GzkP3b1wJrmjJ VfrSzU8/yV0bXCHNIxgCWePDts6gWydv8xVMe5K+rlZ/G108TvfQ6mqit5EYLpgH h1t93Wew/XhxOixzH5qnaunn52tYz6xz3k2rb5l2DLoybr6Gpu5a3Vw8BrvCAQB8 bWr82j9ImgyY7nU/w7t4pWcv3Yt792DWfaipXv1NW+HA5sXE8J5eOP6VyRcDrIFD dMVpFasvbwqOrrtxn1r9QBNofA2/Zm429J0lRh6e5jX0O5hpzz3q6UqarinkQsOz 4CF05uDAeAV+zzHTUtzq66uYHIevPoEB0fyXq6uPetMRccctpmkZxkz/J80j+KyB 3wu0zJIMeLxCGWPtkGxTIRzGmGa6iQfy9AqSgmEzHEbvoBtlMo8MCX9HsM2G2QAS KhzmJTLeYx95nGfMtJVmvTJc1Sbw+RmGmIHjb9AF5v+7bg10FTNvS3+Cbabcfef4 il7MoYUMJFb6Fpz2QQnffPD3c+M0CFThdxHNv5Bu5BLelxiDBtoCB+ixKRg+M2Wb QOtijhvQtFykQDTj6vXVpQfNND/NjWv1u2X3q9VvYJsPalIEpgkYYH5No/dIzVhW t8gMHCZxDXo5s70hrW6imeWfwPEcAVh6anyWOGbwfKjoAUyl38N2Pm8xb590g33l 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 ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=poweredby_mediawiki_88x31.png Content-Type: image/png; name=poweredby_mediawiki_88x31.png Content-Location: http://bits.wikimedia.org/skins-1.5/common/images/poweredby_mediawiki_88x31.png Content-Transfer-Encoding: Base64 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 RU5ErkJggg== ------------RTqM9kPiSYaCbikkmWWjiB Content-Disposition: inline; filename=wikimedia-button.png Content-Type: image/png; name=wikimedia-button.png Content-Location: http://en.wikibooks.org/images/wikimedia-button.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfCAMAAABUFvrSAAAAA3NCSVQICAjb4U/g AAAAilBMVEVjZGeGh4nn6+yZmZni5uTW1taAgYNtbnGkpKYBhbLd3t1svZdCroKt rq/Cv79ztMs7ncDMzMy5t7enzL3Hx8h6e37l5eXw8PDK0dOVwtOozdsfkrnKk47E 1tUNiba8RjxKs4bN3eKawM2SybIslr5Yp8TV4N+80dbY5Oek08O5zNJ+wqW20cf2 9vZ09tAFAAAACXBIWXMAAArwAAAK8AFCrDSYAAACh0lEQVR4Xs3RiZKbMAwGYMu3 zX2T+072fP/XqwSUppM0bLfdmf1DxlhmvhGCRV8UFmVfkm8Ig/0beLnZbJYfcuNK T8Htr6BLcvuBCAv5o/Pf4HjTJ/4AbCyICVhRXk6JUssBXiqVpK16FCvyXJcPHvgJ n5xLVD7CydqdHsKEWjsN7x3B2QC3Kun2k5mE29Rhh4eiH3JcHOgN1vt/h/fIXN7C bZEtl8us2IbFauH6YRirFBO0Wqa6K1bM5gzLQDvGtNKMGdEqrcmrRth7fyIlCMPt M26et2EYUGlxwZ0w3jKDz2WWeVSZ9Z5glltGBY8B8LERtHgwLPeUHsZJ7FfoYc/o 0vq2X+Ms8Chj1gD+he/gCjzBMasMq6hgbdSJwtCSsaiCK3jh1i8FgWFwfg0pxQXh mceAYZkwLO5hMGUPx2DtLWxZLlg2wFJKhC9FBwZ+gFcES0zOhGxZJaVleKmqUrKD VV+QGACJo6ClqgDwDjPC87cRHjveS0rVSimiAZalAdXBQ4ExkEAfTyGcd2WjRhhn PDv3o5AdvN3N6OPJT4fguq4T51J5uIJf65RK9efTw3Pn3PwcjHBwnq+dS+qHiadg zvkT9nc8o9zDwWp3xEns+MOU412W3Z72MKcG0119CF7lITjIXepw6nesSliuhS0B Ig48ByEzDaXW+Z9gnqC0QOoJf3x+xN3pXpMRt23FJXAuFHBdRpFQXEbl3Y4bCj85 TJrMZrMkXXduc5syaoSHpsGLVl2WStRNE5XNTQjuQj1TEKUk5N7CGiypNApcc4BY aVClju7CQ+bY6YCn8+ZusmsArk8ewEQn6WKxOCZz3kzDXEzB71fhT7sn/v4/QvBN vjv8RfkBEHe0Bwh42FAAAAAASUVORK5CYII= ------------RTqM9kPiSYaCbikkmWWjiB--