.com/patterns/white_wave.png",title:"White Wave",categories:["light","wave"],image_dimensions:"23x12"},{image_size:"1K",link:"http://subtlepatterns.com/diagonal-striped-brick/",description:"Might not be super subtle, but quite original in it’s form.",mirror_image:"http://bradjasper.com/subtle-patterns-bookmarklet/patterns/diagonal_striped_brick.png",author:"Alex Smith",download:"http://subtlepatterns.subtlepatterns.netdna-cdn.com/patterns/diagonal_striped_brick.zip",image:"http://subtlepatterns.com/patterns/diagonal_striped_brick.png",title:"Diagonal Striped Brick",categories:["light"],image_dimensions:"150x150"},{image_size:"217K",link:"http://subtlepatterns.com/purty-wood/",description:"You know you love wood patterns, so here’s one more.",mirror_image:"http://bradjasper.com/subtle-patterns-bookmarklet/patterns/purty_wood.png",author:"Richard Tabor.</a",download:"http://subtlepatterns.subtlepatterns.netdna-cdn.com/patterns/purty_wood.zip",image:"http://subtlepatterns.com/patterns/purty_wood.png",title:"Purty Wood",categories:["light","wood"],image_dimensions:"400x400"},{image_size:"412B",link:"http://subtlepatterns.com/vaio-pattern/",description:"I’m guessing this is related to the Sony Vaio? It’s a nice pattern no matter where it’s from.",mirror_image:"http://bradjasper.com/subtle-patterns-bookmarklet/patterns/vaio_hard_edge.png",author:"Zigzain.</a",download:"http://subtlepatterns.subtlepatterns.netdna-cdn.com/patterns/vaio_hard_edge.zip",image:"http://subtlepatterns.com/patterns/vaio_hard_edge.png",title:"Vaio",categories:["light","sony","vaio"],image_dimensions:"37x28"},{image_size:"123B",link:"http://subtlepatterns.com/stacked-circles/",description:"A simple circle. That’s all it takes. This one is even transparent, for those who like that.",mirror_image:"http://bradjasper.com/subtle-patterns-bookmarklet/patterns/stacked_circles.png",author:"Saqib.</a",download:"http://subtlepatterns.subtlepatterns.netdna-cdn.com/patterns/stacked_circles.zip",image:"http://subtlepatterns.com/patterns/stacked_circles.png",title:"Stacked Circles",categories:["circle","light","tiny"],image_dimensions:"9x9"},{image_size:"102B",link:"http://subtlepatterns.com/outlets/",description:"Just 4x8px, but still so stylish!",mirror_image:"http://bradjasper.com/subtle-patterns-bookmarklet/patterns/outlets.png",author:"Michal Chovanec.</a",download:"http://subtlepatterns.subtlepatterns.netdna-cdn.com/patterns/outlets.zip",image:"http://subtlepatterns.com/patterns/outlets.png",title:"Outlets",categories:["dark","tiny"],image_dimensions:"4x8"},{image_size:"41K",link:"http://subtlepatterns.com/light-sketch/",description:"Nice and gray, just the way I like it.",mirror_image:"http://bradjasper.com/subtle-pattern


--------------------------
-- Global controls, GUI
----------------------------

function ssMain:loadMap()
    self.hasGeoMod = false
    self.showedResetWarning = false

    -- Call upon all 4th party mod functions
    for modName, isLoaded in pairs(g_modIsLoaded) do
        if isLoaded then
            self:loadMod(modName)
        end
    end

    -- Set 2MB texture usage
    g_currentMission.textureMemoryUsage = g_currentMission.textureMemoryUsage + 2 * 1024 * 1024

    -- Create the GUI
    self.mainMenu = ssSeasonsMenu:new()
    self.measureToolDialog = ssMeasureToolDialog:new()
    self.twoOptionDialog = ssTwoOptionDialog:new()

    -- Load additional GUI profiles
    g_gui:loadProfiles(self.modDir .. "resources/gui/profiles.xml")

    -- Load the GUI configurations
    g_gui:loadGui(self.modDir .. "resources/gui/SeasonsMenu.xml", "SeasonsMenu", self.mainMenu)
    g_gui:loadGui(self.modDir .. "resources/gui/MeasureToolDialog.xml", "MeasureToolDialog", self.measureToolDialog)
    g_gui:loadGui(self.modDir .. "resources/gui/TwoOptionDialog.xml", "TwoOptionDialog", self.twoOptionDialog)

    -- Correct the focus
    FocusManager:setGui("MPLoadingScreen")

    -- Fix translations
    ssUtil.overwrittenConstant(getfenv(0)["g_i18n"].texts, "action_nextHandTool", ssLang.getText("action_nextHandTool"))
    ssUtil.overwrittenConstant(getfenv(0)["g_i18n"].texts, "action_chainsaw", ssLang.getText("action_chainsaw"))

    -- Remove the (hacked) store items
    if not GS_IS_CONSOLE_VERSION then
        self:removeStoreItem("resources/fakeStoreItem/item.xml")
        self:removeStoreItem("resources/fakeStoreItem/item2.xml")
    end

    if self.descVersion == "0.0.0.0" then
        local w, h = getNormalizedScreenValues(384, 128)
        self.devOverlay = Overlay:new("devOverlay", self.baseUIFilename, 0, 0, w, h)
        self.devOverlay:setUVs(getNormalizedUVs({552, 216, 384, 128}))
        self.devOverlay:setPosition(0.5, 1 - h / 15)
        self.devOverlay:setDimension(w / 4, h / 4)
        self.devOverlay:setAlignment(Overlay.ALIGN_VERTICAL_TOP, Overlay.ALIGN_HORIZONTAL_CENTER)
    end

    if g_currentMission:getIsServer() then
        self.loaded = true
    end
end

function ssMain:deleteMap()
    getfenv(0)["g_seasons"] = nil

    g_inGameMenu.motorStartElement:setDisabled(false)

    ssUtil.unregisterBrand("WOPSTR")

    self.mainMenu:delete()
    self.measureToolDialog:delete()
    self.twoOptionDialog:delete()

    g_gui["SeasonsMenu"] = nil
    g_gui["MeasureToolDialog"] = nil
    g_gui["TwoOptionDialog"] = nil
end

function ssMain:loadGameFinished()
    self:validateDensityMaps()
end

function ssMain:validateDensityMaps()
    local mapSize = getDensityMapSize(g_currentMission.terrainDetailHeightId)

    for i, fruit in ipairs(g_currentMission.fruits) do
        if getDensityMapSize(fruit.id) ~= mapSize then
            logInfo("Warning: Density map size of fruit '" .. FruitUtil.fruitIndexToDesc[i].name .. "' is not the same as terrain")
        end
    end
end

function ssMain:removeStoreItem(path)
    path = string.lower(self.modDir .. path)

    local item = StoreItemsUtil.storeItemsByXMLFilename[path]

    if item then
        StoreItemsUtil.removeStoreItem(item.id)
    end
end

function ssMain:update(dt)
    if self.showControlsInHelpScreen then
        g_currentMission:addHelpButtonText(g_i18n:getText("input_SEASONS_SHOW_MENU"), InputBinding.SEASONS_SHOW_MENU, nil, GS_PRIO_VERY_LOW)


.exec_prefix=site_prefix\n  \n  \n  addsitepackages(known_paths,[sys.prefix])\n  \n  \n  \n  if system_site ==\"true\":\n   PREFIXES.insert(0,sys.prefix)\n  else :\n   PREFIXES=[sys.prefix]\n   ENABLE_USER_SITE=False\n   \n return known_paths\n \n \ndef execsitecustomize():\n ''\n try :\n  try :\n   import sitecustomize\n  except ImportError as exc:\n   if exc.name =='sitecustomize':\n    pass\n   else :\n    raise\n except Exception as err:\n  if sys.flags.verbose:\n   sys.excepthook(*sys.exc_info())\n  else :\n   sys.stderr.write(\n   \"Error in sitecustomize; set PYTHONVERBOSE for traceback:\\n\"\n   \"%s: %s\\n\"%\n   (err.__class__.__name__,err))\n   \n   \ndef execusercustomize():\n ''\n try :\n  try :\n   import usercustomize\n  except ImportError as exc:\n   if exc.name =='usercustomize':\n    pass\n   else :\n    raise\n except Exception as err:\n  if sys.flags.verbose:\n   sys.excepthook(*sys.exc_info())\n  else :\n   sys.stderr.write(\n   \"Error in usercustomize; set PYTHONVERBOSE for traceback:\\n\"\n   \"%s: %s\\n\"%\n   (err.__class__.__name__,err))\n   \n   \ndef main():\n ''\n\n\n\n \n global ENABLE_USER_SITE\n \n orig_path=sys.path[:]\n known_paths=removeduppaths()\n if orig_path !=sys.path:\n \n \n  abs_paths()\n  \n known_paths=venv(known_paths)\n if ENABLE_USER_SITE is None :\n  ENABLE_USER_SITE=check_enableusersite()\n known_paths=addusersitepackages(known_paths)\n known_paths=addsitepackages(known_paths)\n setquit()\n setcopyright()\n sethelper()\n if not sys.flags.isolated:\n  enablerlcompleter()\n execsitecustomize()\n if ENABLE_USER_SITE:\n  execusercustomize()\n  \n  \n  \nif not sys.flags.no_site:\n main()\n \ndef _script():\n help=\"\"\"\\\n    %s [--user-base] [--user-site]\n\n    Without arguments print some useful information\n    With arguments print the value of USER_BASE and/or USER_SITE separated\n    by '%s'.\n\n    Exit codes with --user-base or --user-site:\n      0 - user site directory is enabled\n      1 - user site directory is disabled by user\n      2 - uses site directory is disabled by super user\n          or for security reasons\n     >2 - unknown error\n    \"\"\"\n args=sys.argv[1:]\n if not args:\n  user_base=getuserbase()\n  user_site=getusersitepackages()\n  print(\"sys.path = [\")\n  for dir in sys.path:\n   print(\"    %r,\"%(dir,))\n  print(\"]\")\n  print(\"USER_BASE: %r (%s)\"%(user_base,\n  \"exists\"if os.path.isdir(user_base)else \"doesn't exist\"))\n  print(\"USER_SITE: %r (%s)\"%(user_site,\n  \"exists\"if os.path.isdir(user_site)else \"doesn't exist\"))\n  print(\"ENABLE_USER_SITE: %r\"%ENABLE_USER_SITE)\n  sys.exit(


),rgba(255,255,255,.3));background-image:linear-gradient(to bottom,rgba(255,255,255,.6),rgba(255,255,255,.3))}.km-ios7 .km-filter-wrap>input{text-shadow:0 0 0 rgba(0,0,0,.4)}.km-ios7 .km-filter-reset .km-clear,.km-ios7 .km-filter-wrap:before{color:rgba(0,0,0,.4)}.km-ios7 label.km-required:after{color:#fd472b}.km-ios7 .km-touch-scrollbar{background-color:#919191}.km-ios7 .km-popup-overlay,.km-ios7 .km-shim{background:rgba(0,0,0,.4)}.km-ios7 .k-overflow-container .km-state-disabled:active,.km-ios7 .k-overflow-container a.km-state-disabled,.km-ios7 .km-actionsheet>li>a,.km-ios7 .km-popup .k-item{background:#F7F7F8;border-bottom-color:rgba(180,180,180,.5)}.km-ios7 .km-popup{background:rgba(0,0,0,.4)}.km-ios7 .km-popup.km-pane,.km-tablet .km-ios7 .km-actionsheet-wrapper{background-color:#F7F7F8}.km-ios7 .km-popup.km-pane{-webkit-box-shadow:0 0 0 1px rgba(180,180,180,.5);box-shadow:0 0 0 1px rgba(180,180,180,.5)}.km-ios7 .k-overflow-wrapper .km-popup,.km-ios7 .k-split-wrapper .km-popup{-webkit-box-shadow:0 0 5px rgba(180,180,180,.5);box-shadow:0 0 5px rgba(180,180,180,.5)}.km-ios7 .km-popup-arrow:after{border-color:#F7F7F8 transparent}.km-ios7 .km-left .km-popup-arrow:after,.km-ios7 .km-right .km-popup-arrow:after{border-color:transparent #F7F7F8}.km-ios7 .km-pane>.km-loader,.km-ios7.km-pane>.km-loader{background:rgba(0,0,0,.1)}.km-ios7 .k-overflow-wrapper .km-actionsheet-wrapper,.km-ios7 .k-split-wrapper .km-actionsheet-wrapper{background:rgba(0,0,0,.2)}.km-ios7 .km-loader h1,.km-ios7 .km-scroller-refresh .km-template{color:#222;text-shadow:0 1px 0 rgba(255,255,255,.5)}.km-ios7 .km-scroller-pull .km-template{color:#363940}.km-ios7 .km-list select:not([multiple]) option{color:#333}.km-ios7 .km-collapsible-content,.km-ios7 .km-collapsible-header{border-color:rgba(180,180,180,.5);color:#000}.km-ios7 .km-collapsible-header .km-icon{color:#bababa}.km-ios7 .km-drawer a,.km-ios7 .km-legend-button{text-decoration:none}.km-ios7 .km-checkbox-label,.km-ios7 .km-list .km-label-above,.km-ios7 .km-radio-label{color:#8f8f8f}.km-ios7 .km-list fieldset .km-inline-field{border-color:rgba(180,180,180,.5)}.km-ios7 .km-group-title,.km-ios7 .km-list fieldset legend,.km-ios7 .km-shim li.km-actionsheet-title{background:#efeff4;border-color:rgba(180,180,180,.5);color:#007aff}.km-ios7 .k-slider .k-draghandle,.km-ios7 .k-slider .k-draghandle:hover,.km-ios7 .km-badge,.km-ios7 .km-buttongroup .km-state-active .km-icon


s - 3Blue1Brown Summer of Math Exposition #SoME1",
	},
	{
		url: "https://youtube.com/embed/hdv_pnMVaVE",
		title: "The Projective Perspective of Perspective Projection",
	},
	{
		url: "https://youtube.com/embed/a4gji7Q84mc",
		title: "Why Bubbles Look Like This (3b1b Summer of Math Exposition)",
	},
	{
		url: "https://youtube.com/embed/5TvNVn_16tA",
		title: "Order Within Chaos: How this game creates a fractal | Summer of Math Exposition #1",
	},
	{ url: "https://youtube.com/embed/XcyYpUGRlcc", title: "How does a statistical PROOF work?" },
	{
		url: "https://youtube.com/embed/iTHTLvGSiSs",
		title: "Faster than Light Is the Wrong Direction",
	},
	{ url: "https://youtube.com/embed/POqw_vsidtk", title: "Rutherford's Gold Foil Experiment" },
	{ url: "https://youtube.com/embed/oaNYDHWVQC4", title: "Where Trigonometry Comes From" },
	{
		url: "https://youtube.com/embed/1-mn7xBuzBk",
		title: "How Pascal's Triangle Help us to Discover Summation Formula",
	},
	{ url: "https://youtube.com/embed/QRrcwahx-3s", title: "Why should you learn Type Theory?" },
	{
		url: "https://youtube.com/embed/ahCylaATboY",
		title: "HOW TO USE STATISTICS TO WIN A WAR - Frequency Analysis Explained",
	},
	{
		url: "https://youtube.com/embed/QCIE0s3G9w0",
		title: "Jacobian in Daily Life | Physical Interpretation #3B1B #SoME1",
	},
	{ url: "https://youtube.com/embed/crO9_vvu5Ls", title: "What Causes Economic Inequality?" },
	{ url: "https://youtube.com/embed/rfNSPvh0yk8", title: "The maths behind musical scales" },
	{
		url: "https://youtube.com/embed/3S5NLH-qWss",
		title: "Game Theory of Pride & Prejudice Ch.6: Filling Out Payoffs in a Strategic Disagreement",
	},
	{ url: "https://youtube.com/embed/z5ReaU4npoE", title: "What is Lambda Calculus and why?" },
	{
		url: "https://youtube.com/embed/BIPP0QDS8js",
		title: "Why do polar rose petals follow that pattern?",
	},
	{ url: "https://youtube.com/embed/3lUtPA4G42A", title: "Snowy the Snowflake" },
	{
		url: "https://youtube.com/embed/OLxo59BrJaw",
		title: "There's a Donut in the Wallpaper: Topology, Symmetry, and Conway's Magic Theorem",
	},
	{
		url: "https://youtube.com/embed/iUQNL8_YTDo",
		title: "Évariste Galois and his works - 3b1b style!",
	},
	{ url: "https://youtube.com/embed/cxet9TKutNI", title: "Stirling engines and Carnot's engine" },
	{
		url: "https://youtube.com/embed/H3LBLgw8bDo",
		title: "Stretch of the Imagination [Manipulating the Entire Number Line] (F.O.A. #5)",
	},
	{
		url: "https://youtube.com/embed/faAlt9IzJiQ",
		title: "Finding hay in a haystack (where the hay is a non-computable number)",
	},
	{
		url: "


from django.urls import path
from .views import GenerateCoverLetterView, InterviewQuestionView, UserInterviewQuestionsView

urlpatterns = [
    path('generate-cover-letter/', GenerateCoverLetterView.as_view(), name='generate-cover-letter'),
    path('generate-questions/', InterviewQuestionView.as_view(), name='generate-questions'),
    path('user/<int:user_id>/questions/', UserInterviewQuestionsView.as_view(), name='user-questions'),
]


	if (!rp_) {
					continue;
				}

				RenderPass &rp = *rp_;
				if (renderpassesWithExternalRTs.find(rp.id) == renderpassesWithExternalRTs.end()) {
					continue;
				}

				assert(rp.fb);
				LOG_TODO("cache them")
				renderer.deleteFramebuffer(std::move(rp.fb));
			}
		}
		assert(currentRP == Default<RP>::value);

		if (storedException) {
			LOG("re-throwing exception");
			std::rethrow_exception(storedException);
		}
	}

	ComputePipelineHandle createComputePipeline(Renderer &renderer, const ComputePipelineDesc &desc) {
		auto it = computePipelines.find(desc);
		if (it != computePipelines.end()) {
			return it->second;
		}

		// store the owning handle in computePipelines and return a non-owning copy
		auto handle = renderer.createComputePipeline(desc);
		ComputePipelineHandle result = handle;

		computePipelines.emplace(desc, std::move(handle));

		return result;
	}

	GraphicsPipelineHandle createGraphicsPipeline(Renderer &renderer, RP rp, GraphicsPipelineDesc &desc) {
		assert(state == RGState::Ready || state == RGState::Rendering);

		LOG_TODO("use hash map")
		bool DEBUG_ASSERTED found = false;
		for (auto &op : operations) {
			auto *rp_ = std::get_if<RenderPass>(&op);
			if (!rp_) {
				continue;
			}

			RenderPass &rpData = *rp_;
			if (rpData.id == rp) {
				desc.renderPass(rpData.handle);
				found = true;
				break;
			}
		}
		assert(found);

		{
			LOG_TODO("this is too strict, renderpasses only need to be compatible instead of identical")
			auto it = graphicsPipelines.find(desc);
			if (it != graphicsPipelines.end()) {
				return it->second;
			}
		}

		// store the owning handle in graphicsPipelines and return a non-owning copy
		auto handle = renderer.createGraphicsPipeline(desc);
		GraphicsPipelineHandle result = handle;

		graphicsPipelines.emplace(desc, std::move(handle));

		return result;
	}

};

}  // namespace renderer

#endif  // RENDERGRAPH_H


 the document should have
        final int NUM_PAGES = 4;
        // The document starts with one section, insert the barcode into this existing section
        insertBarcodeIntoFooter(builder, doc.getFirstSection(), HeaderFooterType.FOOTER_PRIMARY);

        for (int i = 1; i < NUM_PAGES; i++)
        {
            // Clone the first section and add it into the end of the document
            Section cloneSection = (Section) doc.getFirstSection().deepClone(false);
            cloneSection.getPageSetup().setSectionStart(SectionStart.NEW_PAGE);
            doc.appendChild(cloneSection);

            // Insert the barcode and other information into the footer of the section
            insertBarcodeIntoFooter(builder, cloneSection, HeaderFooterType.FOOTER_PRIMARY);
        }

        // Save the document as a PDF to disk
        // You can also save this directly to a stream
        doc.save(getArtifactsDir() + "WorkingWithImages.InsertBarcodeImage.docx");
        //ExEnd:InsertBarcodeImage
    }

    //ExStart:InsertBarcodeIntoFooter
    //GistId:6f849e51240635a6322ab0460938c922
    private void insertBarcodeIntoFooter(DocumentBuilder builder, Section section, int footerType) throws Exception
    {
        // Move to the footer type in the specific section.
        builder.moveToSection(section.getDocument().indexOf(section));
        builder.moveToHeaderFooter(footerType);

        // Insert the barcode, then move to the next line and insert the ID along with the page number.
        // Use pageId if you need to insert a different barcode on each page. 0 = First page, 1 = Second page etc.
        builder.insertImage(getImagesDir() + "Barcode.png");
        builder.writeln();
        builder.write("1234567890");
        builder.insertField("PAGE");

        // Create a right-aligned tab at the right margin.
        double tabPos = section.getPageSetup().getPageWidth() - section.getPageSetup().getRightMargin() - section.getPageSetup().getLeftMargin();
        builder.getCurrentParagraph().getParagraphFormat().getTabStops().add(new TabStop(tabPos, TabAlignment.RIGHT,
            TabLeader.NONE));

        // Move to the right-hand side of the page and insert the page and page total.
        builder.write(ControlChar.TAB);
        builder.insertField("PAGE");
        builder.write(" of ");
        builder.insertField("NUMPAGES");
    }
    //ExEnd:InsertBarcodeIntoFooter

    @Test
    public void compressImages() throws Exception
    {
        Document doc = new Document(getMyDir() + "Images.docx");

        // 220ppi Print - said to be excellent on most printers and screens.
        // 150ppi Screen - said to be good for web pages and projectors.
        // 96ppi Email - said to be good for minimal document size and sharing.
        final int DESIRED_PPI = 150;

        // In .NET this seems to be a good compression/quality setting.
        final int JPEG_QUALITY = 90;

        // Resample images to the desired PPI and save.
        int count = Resampler.resample(doc, DESIRED_PPI, JPEG_QUALITY);

        System.out.println(MessageFormat.format("Resampled {0} images.", count));

        if (count != 1)
            System.out.println("We expected to have only 1 image resampled in this test document!");

        doc.save(getArtifactsDir() + "WorkingWithImages.CompressImages.docx");

        // Verify that the first image was compressed by checking the new PPI.
        doc = new Document(getArtifactsDir() + "WorkingWithImages.CompressImages.docx");

        Shape shape = (Shape) doc.getChild(NodeType.SHAPE, 0, true);
        double imagePpi = shape.getImageData().getImageSize().getWidthPixels() /
                ConvertUtil.pointToInch(shape.getSizeInPoints().getX());

        assert imagePpi < 150 : "


存区的文件索引中。

当执行提交操作（`git commit`）时，暂存区的目录树会被写入到版本库（对象库）中，`master`分支会做相应的更新，即`master`最新指向的目录树就是提交时原暂存区的目录树。

当执行 `git reset` 时，Git会使用版本库中最新提交（默认）的内容替换暂存区中的内容，即暂存区中的内容和版本库中最新提交的内容相同。如果使用 `--hard` 参数，除了替换暂存区的内容，同时也会替换工作区中的内容（即将工作区的状态替换成最新提交的状态）。

`git checkout` 命令和指定了 `--hard` 参数的 `git reset` 命令相似，除了 `git checkout` 命令可以检出一个或多个文件，或者整个提交历史状态。另外，`git checkout` 不仅可以用对象库中的提交对象替换暂存区或工作区中的内容，也可以用暂存区中的内容替换工作区中的内容；而`git reset` 只能使用对象库中的提交对象替换暂存区或工作区中的内容。

`git rm` 命令仅仅是将某个文件或目录从暂存区中删除，并不删除工作区中的文件或目录；另外，当使用 SHELL 命令 `rm` 将工作区中的文件或目录删除后，也须要使用 `git rm` 命令将该文件或目录从暂存区中删除。

文件`.git/index`实际上就是一个包含文件索引的目录树，像是一个虚拟的工作区。在这个虚拟工作区的目录树中，记录了文件名和文件的状态信息（时间戳和文件长度等）。文件的内容并没有存储在其中，而是保存在Git对象库`.git/objects`目录中，文件索引建立了文件和对象库中对象实体之间的对应。

### 2、工作区、暂存区、版本库之间的差异比较

![IMG4](./_static/4.png)

    git diff 命令比较暂存区和工作区之间的差异；
    git diff  branch_name 命令比较版本库中 branch_name 分支的状态与工作区的状态之间的差异；
    git diff --cached [brance] 命令比较版本库中某个分支（默认是HEAD）的状态与暂存区的状态之间的差异。

当执行`git status`（或`git diff`）命令扫描工作区改动时，先依据`.git/index`文件中记录的（用于跟踪工作区文件的）时间戳、长度等信息判断工作区文件是否改变，如果工作区文件的时间戳改变了，说明文件的内容可能被


Qualifier -> {
                if(q.connective == LogicalConnectiveQualifier.LBinOp.AND) {
                    if(!recursivePropagation(q.op1, q.applyNot, out, s, w, l)) {
                        return false
                    }
                    if(!recursivePropagation(q.op2, q.applyNot, out, s, w, l)) {
                        return false
                    }
                }
            }
        }
        return true
    }

    private fun propagateCondition(op1: TACSymbol, op2: TACSymbol, condition: ConditionQualifier.Condition, toRet: MutableMap<TACSymbol.Var, MutableList<PathInformation<Q>>>, s: S, w: W, l: LTACCmd): Boolean {
        return when(condition) {
            ConditionQualifier.Condition.EQ -> {
                propagateEq(op1, op2, toRet, s, w, l)
            }
            ConditionQualifier.Condition.NEQ -> propagateNe(op1, op2, toRet, s, w, l)
            ConditionQualifier.Condition.LT -> propagateLt(op1, op2, toRet, s, w, l)
            ConditionQualifier.Condition.LE -> propagateLe(op1, op2, toRet, s, w, l)
            ConditionQualifier.Condition.SLT -> propagateSlt(op1, op2, toRet, s, w, l)
            ConditionQualifier.Condition.SLE -> propagateSle(op1, op2, toRet, s, w, l)
        }
    }

    /**
      Check whether the argument (assumed to be the first operand of an SLT/SLE) is less than [MAX_EVM_INT256],
      i.e. it is positive.
     */
    private fun definitelyPositive(sym: TACSymbol, s: S, w: W, l: LTACCmd) =
        when(sym) {
            is TACSymbol.Const -> sym.value <= MAX_EVM_INT256
            is TACSymbol.Var -> extractValue(sym, s, w, l)?.x?.let { q: IntApprox<*> ->
                q.getLowerBound()?.let {
                    it >= BigInteger.ZERO
                } == true && q.getUpperBound()?.let {
                    it <= MAX_EVM_INT256
                } == true
            } ?: false
        }

    private fun definitelyNegative(sym: TACSymbol, s: S, w: W, l: LTACCmd) =
        when(sym) {
            is TACSymbol.Const -> sym.value >= MIN_EVM_INT256_2S_COMPLEMENT
            is TACSymbol.Var -> extractValue(sym, s, w, l)?.x?.let { q: IntApprox<*> ->
                q.getUpperBound()?.let {
                    it <= MAX_EVM_UINT256
                } == true &&
                q.getLowerBound()?.let {
                    it >= MIN_EVM_INT256_2S_COMPLEMENT
                } == true
            } ?: false
        }

    protected open fun propagateSle(op1: TACSymbol, op2: TACSymbol, toRet: MutableMap<TACSymbol.Var, MutableList<PathInformation<Q>>>, s: S, w: W, l: LTACCmd): Boolean {
        /*
            if op1 is (provably) positive, then:
            1. op2 must be bounded below by the value of op1, and
            2. op2 must be bounded above by the max signed int value
         */
        if(definitelyPositive(op1, s, w, l)) {
            propagateLe(op1, op2, toRet, s, w, l)
            propagateDefinitelyPositive(op2, toRet, l, s, w)
        }
        /*
          if op2 is (provably) negative, then:
          1. op1 is bounded above by the (unsigned) value of op2
          2. op1 is bounded below by MAX_INT_256 + 1 (aka, MIN_EVM_INT256)
         */
        if(


n:justify}.mdl-typography--text-nowrap{white-space:nowrap}.mdl-typography--text-lowercase{text-transform:lowercase}.mdl-typography--text-uppercase{text-transform:uppercase}.mdl-typography--text-capitalize{text-transform:capitalize}.mdl-typography--font-thin{font-weight:200!important}.mdl-typography--font-light{font-weight:300!important}.mdl-typography--font-regular{font-weight:400!important}.mdl-typography--font-medium{font-weight:500!important}.mdl-typography--font-bold{font-weight:700!important}.mdl-typography--font-black{font-weight:900!important}.material-icons{font-family:'Material Icons';font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:'liga';-webkit-font-feature-settings:'liga';-webkit-font-smoothing:antialiased}.mdl-shadow--2dp{box-shadow:0 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0 rgba(0,0,0,0.14),0px 1px 5px 0 rgba(0,0,0,0.12)}.mdl-shadow--3dp{box-shadow:0 3px 3px -2px rgba(0,0,0,0.2),0px 3px 4px 0 rgba(0,0,0,0.14),0px 1px 8px 0 rgba(0,0,0,0.12)}.mdl-shadow--4dp{box-shadow:0 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0 rgba(0,0,0,0.14),0px 1px 10px 0 rgba(0,0,0,0.12)}.mdl-shadow--6dp{box-shadow:0 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0 rgba(0,0,0,0.14),0px 1px 18px 0 rgba(0,0,0,0.12)}.mdl-shadow--8dp{box-shadow:0 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)}.mdl-shadow--16dp{box-shadow:0 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)}.mdl-shadow--24dp{box-shadow:0 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)}.mdl-animation--default{-webkit-transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-timing-function:cubic-bezier(0.4,0,0.2,1)}.mdl-animation--fast-out-slow-in{-webkit-transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-timing-function:cubic-bezier(0.4,0,0.2,1)}.mdl-animation--linear-out-slow-in{-webkit-transition-timing-function:cubic-bezier(0,0,0.2,1);transition-timing-function:cubic-bezier(0,0,0.2,1)}.mdl-animation--fast-out-linear-in{-webkit-transition-timing-function:cubic-bezier(0.4,0,1,1);transition-timing-function:cubic-bezier(0.4,0,1,1)}.mdl-ripple{background:black;border-radius:50%;height:50px;left:0;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-transform


      vertical-align: middle;
    }

    // Make static controls behave like regular ones
    .form-control-plaintext {
      display: inline-block;
    }

    .input-group,
    .custom-select {
      width: auto;
    }

    // Remove default margin on radios/checkboxes that were used for stacking, and
    // then undo the floating of radios and checkboxes to match.
    .form-check {
      display: flex;
      align-items: center;
      justify-content: center;
      width: auto;
      padding-left: 0;
    }
    .form-check-input {
      position: relative;
      flex-shrink: 0;
      margin-top: 0;
      margin-right: $form-check-input-margin-x;
      margin-left: 0;
    }

    .custom-control {
      align-items: center;
      justify-content: center;
    }
    .custom-control-label {
      margin-bottom: 0;
    }
  }
}
// Sizing shortcuts

@mixin size($width, $height: $width) {
  width: $width;
  height: $height;
  @include deprecate("`size()`", "v4.3.0", "v5");
}
// Only display content to screen readers
//
// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/

@mixin sr-only() {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px; // Fix for https://github.com/twbs/bootstrap/issues/25686
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

// Use in conjunction with .sr-only to only display content when it's focused.
//
// Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
//
// Credit: HTML5 Boilerplate

@mixin sr-only-focusable() {
  &:active,
  &:focus {
    position: static;
    width: auto;
    height: auto;
    overflow: visible;
    clip: auto;
    white-space: normal;
  }
}
// stylelint-disable declaration-no-important

// Contextual backgrounds

@mixin bg-variant($parent, $color, $ignore-warning: false) {
  #{$parent} {
    background-color: $color !important;
  }
  a#{$parent},
  button#{$parent} {
    @include hover-focus() {
      background-color: darken($color, 10%) !important;
    }
  }
  @include deprecate("The `bg-variant` mixin", "v4.4.0", "v5", $ignore-warning);
}

@mixin bg-gradient-variant($parent, $color, $ignore-warning: false) {
  #{$parent} {
    background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;
  }
  @include deprecate("The `bg-gradient-variant` mixin", "v4.5.0", "v5", $ignore-warning);
}
/// Grid system
//
// Generate semantic grid columns with these mixins.

@mixin make-container($gutter: $grid-gutter-width) {
  width: 100%;
  padding-right: $gutter / 2;
  padding-left: $gutter / 2;
  margin-right: auto;
  margin-left: auto;
}

@mixin make-row($gutter: $grid-gutter-width) {
  display: flex;
  flex-wrap: wrap;
  margin-right: -$gutter / 2;
  margin-left: -$gutter / 2;
}

// For each breakpoint, define the maximum width of the container in a media query
@mixi


 port: u16) -> Result<(Vec<Self::Reader>, Self::Writer, Self::Owner)> {
        log::trace!("binding to port {}", port);

        let bind6 = UdpSocket::bind(Ipv6Addr::UNSPECIFIED, port);
        if let Ok((new_port, _)) = bind6 {
            port = new_port;
        }

        let bind4 = UdpSocket::bind(Ipv4Addr::UNSPECIFIED, port);
        if let Ok((new_port, _)) = bind4 {
            port = new_port;
        }

        if bind4.is_err() && bind6.is_err() {
            log::trace!("failed to bind for either IP version");
            return Err(bind6.unwrap_err());
        }

        let sock6 = bind6.ok().map(|(_, socket)| Arc::new(socket));
        let sock4 = bind4.ok().map(|(_, socket)| Arc::new(socket));

        let owner = MacosOwner {
            port,
            _sock6: sock6.clone(),
            _sock4: sock4.clone(),
        };

        let mut readers: Vec<Self::Reader> = Vec::with_capacity(2);
        if let Some(sock) = sock6.clone() {
            readers.push(MacosUDPReader::V6(sock))
        }
        if let Some(sock) = sock4.clone() {
            readers.push(MacosUDPReader::V4(sock))
        }
        debug_assert!(!readers.is_empty());

        let writer = MacosUDPWriter { sock4, sock6 };

        Ok((readers, writer, owner))
    }
}
/*****************************************************
             PROJECT  : hpc_allocator_rust
             VERSION  : 0.1.0-dev
             DATE     : 05/2018
             AUTHOR   : <NAME>
             LICENSE  : CeCILL-C
*****************************************************/

/// A container is there to contain many runs to fit in a macro bloc.

//import
use common::shared::SharedPtrBox;
use common::types::{Addr,Size};
use common::list::{List,ListNode,Listable};
use chunk::small::run::{SMALL_RUN_SIZE,SmallChunkRun,SmallChunkRunPtr};
use common::ops;
use common::consts::*;
use core::mem;

/// Implement container which is used to store all the runs obtained by splitting
/// a macro bloc insto runs (segs of 4K thesemve splitted for given small sizes.)
pub struct SmallChunkContainer
{
    list_node: ListNode,
    empty: List<SmallChunkRun>,
    size: Size,
    reserved_runs: Size,
}

impl SmallChunkContainer {
    /// Initizalize a new small run container onto the given allocated segment.
    /// It setup the headers and make the splitting to generate free runs and keep
    /// track of them.
    pub fn setup(ptr: Addr, size: Size) -> SmallChunkContainerPtr {
        let mut cur = SmallChunkContainerPtr::new_addr(ptr);
        cur.list_node = ListNode::new();
        cur.empty = List::new();
        cur.size = size;
        cur.reserved_runs = 0;
        cur.setup_splitting();
        return cur;
    }

    /// Check if the container is empty an do not contain anymore empty runs.
    /// This is used by the allocator to know if we need to go to another
    /// container to get free runs.
    pub fn is_empty(&self,) -> bool {
        self.reserved_runs == 0
    }

    /// Register an empty run into the container to latter reuse it or wait
    /// all the runs become free again to free the container itself.
    pub fn reg_empty(&mut self,run: SmallChunkRunPtr) {
        let local = self


c_policy_ops, mpo_proc_check_fork), 0);
    kwrite32_exec(sbopsoffset + offsetof(struct mac_policy_ops, mpo_iokit_check_get_property), 0);
    kwrite32_exec(sbopsoffset + offsetof(struct mac_policy_ops, mpo_cred_label_update_execve), 0);
    print_log("nuked sandbox\n");

    print_log("[*] patch tfp0\n");
    uint32_t tfp0_patch = kbase + find_tfp0_patch(kbase, kdata, ksize);
    print_log("[PF] tfp0_patch: %08x\n", tfp0_patch);
    kwrite32_exec(tfp0_patch, 0xbf00bf00);

    print_log("enable patched.\n");
}

void jailbreak_init(void) {
    uname(&u);
    ckernv = strdup(u.version);
    print_log("kern.version: %s\n", ckernv);

    if (strstr(ckernv, "3248") || strstr(ckernv, "3247")) {
        print_log("isIOS9? yes\n");
        isIOS9 = true;
    }

    if (strstr(ckernv, "S5L894")) {
        print_log("isA5? yes\n");
        isA5 = true;
    }
}

#ifdef UNTETHER
void load_jb(void){
    // remount rootfs
    print_log("[*] remounting rootfs\n");
    char* nmr = strdup("/dev/disk0s1s1");
    int mntr = mount("hfs", "/", MNT_UPDATE, &nmr);
    print_log("remount = %d\n",mntr);

    const char *jl;
    pid_t pd = 0;

    int f = open("/.installed_daibutsu", O_RDONLY);
    if (f == -1) {
        chmod("/private", 0777);
        chmod("/private/var", 0777);
        chmod("/private/var/mobile", 0777);
        chmod("/private/var/mobile/Library", 0777);
        chmod("/private/var/mobile/Library/Preferences", 0777);

        posix_spawn(&pd, "/var/lib/dpkg/info/com.saurik.patcyh.extrainst_", 0, 0, (char**)&(const char*[]){"/var/lib/dpkg/info/com.saurik.patcyh.extrainst_", "install", NULL}, NULL);
        print_log("[*] pid = %x\n", pd);
        waitpid(pd, 0, 0);
        sleep(3);

        open("/.installed_daibutsu", O_RDWR|O_CREAT);
        chmod("/.installed_daibutsu", 0644);
        chown("/.installed_daibutsu", 0, 0);
    }

    print_log("[*] loading JB\n");
    // substrate: run "dirhelper"
    jl = "/bin/bash";
    posix_spawn(&pd, jl, NULL, NULL, (char **)&(const char*[]){ jl, "/usr/libexec/dirhelper", NULL }, NULL);
    waitpid(pd, NULL, 0);

    usleep(10000);

    // looks like this doesnt work with jsc untether, will use daemonloader instead, launched by dirhelper above
    jl = "/bin/launchctl";
    posix_spawn(&pd, jl, NULL, NULL, (char **)&(const char*[]){ jl, "load", "/Library/LaunchDaemons", NULL }, NULL);
    posix_spawn(&pd, jl, NULL, NULL, (char **)&(const char*[]){ jl, "load", "/Library/NanoLaunchDaemons", NULL }, NULL);

    usleep(10000);
}

void failed(void){
    print_log("[-] failed to execute untether. rebooting.\n");
    reboot(0);
}

int main(void){
    jailbreak_init();

    run_exploit();

    if(kinfo->tfp0){
        print_log("[*] got tfp0: %x\n", kinfo->tfp0);
    } else {
        print_log("[-] Failed to get tfp0\n");
        failed();
        return -1;
    }

    uint32_t self_ucred = 0;
    uint8_t proc_ucred = 0x8c;
    if (strstr(ckernv, "3248.6") || strstr(ckernv, "3248.5") || strstr(ckernv, "3248.4")) {
        proc_ucred = 0xa4;
    } else if (strstr(ckernv, "3248.3") || strstr(ckernv, "3248.2") || strstr(ckernv, "3248.10")) {
        proc_ucred = 0x98;
    }
    if (getuid() != 0 || getgid() != 0) {
        print_log("[*] Set uid to 0 (proc_ucred: %x)...\n", proc_ucred);
        uint32_t kern_ucred = kread32(kinfo->kern_proc_addr + proc_ucred);
        self_ucred = kread32(kinfo->self_proc_addr + proc_ucred);
        kwrite32(kinfo->self_proc_addr + proc_ucred, kern_ucred);
        setuid(0);
        setgid(0);
    }
    if (getuid() != 0 || getgid() != 0) return -1;

    if(!isIOS9){
        unjail8();
    } else {
        unjail9();
    }
    load_jb();

    print_log("[*] DONE!\n");

    return 0;
}
#endif


    /**
         * 获得字符串的长度,中文算2个长度
         * @method
         * @static
         * @param {string} str
         * @returns {number}
         *
         */
        public static GetStrLen(str:String):number
        {
            var length:number = str.length;
            var re:RegExp = /[\u4e00-\u9fa5]{1,}/g; //用正则读取字符串中有多个少个中文
            var temp: any = str.match(re);
            if(temp != null)
            {
                length += temp.join("").length; //在长度上增加一次中文的个数，这样中文就被当做2个字符计算长度了
            }
            return length;
        }
        /**
         * 获取子字符串。中文算2个长度。
         *  @method
         * @static
         * @param str
         * @param length
         * @returns {string}
         *
         */
        public static GetSubstr(str:string,length:number):string
        {
            var re:RegExp = /[\u4e00-\u9fa5]{1,}/g; //用正则读取字符串中有多个少个中文
            var resulet: string = "";
            var len: number = length;
            var i: number = 0;
            var b: boolean = len > 0;
            while(b)//len > 0 && i > str.length-1)
            {
                var c:string = str.charAt(i);
                resulet += c
                var temp: any = c.match(re);
                if(temp != null)
                {
                    len -= 2; //在长度上增加一次中文的个数，这样中文就被当做2个字符计算长度了
                }
                else
                {
                    len -= 1;
                }
                i++;
                if(len <= 0 || i > str.length - 1)
                    b = false;
            }
            return resulet;
        }

        /**
         * @method
         * @static
         * 获取时间串
         * @param time 指定时间的time值
         * @returns {string}
         */
        public static GetTimeString(time:number):string
        {
            var date:Date = new Date();
            date.setTime(time);
            var result: string = date.getFullYear() +"-";
            var temp: number = (date.getMonth() + 1);
            result += temp < 10 ? "0" + temp : temp;
            result += "-";
            temp = date.getDate();
            result +=  temp < 10 ? "0" + temp : temp;
            result += " ";

            temp = date.getHours();
            result +=  temp < 10 ? "0" + temp : temp;
            result += ":";

            temp = date.getMinutes();
            result +=  temp < 10 ? "0" + temp : temp;
            result += ":";

            temp = date.getSeconds();
            result +=  temp < 10 ? "0" + temp : temp;

            return result;
        }

        /**
         * 把指定的秒数转换成 x天x小时x分钟的格式
         * @param second
         * @returns {any}
         */
        public static secToTimeString(second:number,format:Array<string> = ["天",":",":",""]):string
        {
            if(second<=0)return "";
            var temp  = 3600 * 24;
            var day:number = Math.floor(second/temp);
            second = second % temp;

            temp = 3600;
            var hour:number = Math.floor(second/temp);
            second = second % temp;

            temp = 60;
            var mins:number = Math.floor(second/temp);
            second = second % temp


4ED028 004E8568  4E 80 00 20 */	blr
lbl_804ED02C:
/* 804ED02C 004E856C  88 A6 00 02 */	lbz r5, 2(r6)
/* 804ED030 004E8570  88 03 00 02 */	lbz r0, 2(r3)
/* 804ED034 004E8574  7C 05 00 40 */	cmplw r5, r0
/* 804ED038 004E8578  41 82 00 0C */	beq lbl_804ED044
/* 804ED03C 004E857C  38 60 FF FF */	li r3, -1
/* 804ED040 004E8580  4E 80 00 20 */	blr
lbl_804ED044:
/* 804ED044 004E8584  88 A6 00 03 */	lbz r5, 3(r6)
/* 804ED048 004E8588  88 03 00 03 */	lbz r0, 3(r3)
/* 804ED04C 004E858C  7C 05 00 40 */	cmplw r5, r0
/* 804ED050 004E8590  41 82 00 0C */	beq lbl_804ED05C
/* 804ED054 004E8594  38 60 FF FF */	li r3, -1
/* 804ED058 004E8598  4E 80 00 20 */	blr
lbl_804ED05C:
/* 804ED05C 004E859C  38 60 00 00 */	li r3, 0
/* 804ED060 004E85A0  4E 80 00 20 */	blr

.global func_804ED064
func_804ED064:
/* 804ED064 004E85A4  3C 80 80 69 */	lis r4, lbl_80691CD8@ha
/* 804ED068 004E85A8  38 84 1C D8 */	addi r4, r4, lbl_80691CD8@l
/* 804ED06C 004E85AC  90 64 00 80 */	stw r3, 0x80(r4)
/* 804ED070 004E85B0  4E 80 00 20 */	blr

.global func_804ED074
func_804ED074:
/* 804ED074 004E85B4  3C 80 80 69 */	lis r4, lbl_80691CD8@ha
/* 804ED078 004E85B8  38 84 1C D8 */	addi r4, r4, lbl_80691CD8@l
/* 804ED07C 004E85BC  90 64 00 88 */	stw r3, 0x88(r4)
/* 804ED080 004E85C0  4E 80 00 20 */	blr

.global func_804ED084
func_804ED084:
/* 804ED084 004E85C4  3C 80 80 69 */	lis r4, lbl_80691CD8@ha
/* 804ED088 004E85C8  38 84 1C D8 */	addi r4, r4, lbl_80691CD8@l
/* 804ED08C 004E85CC  90 64 00 84 */	stw r3, 0x84(r4)
/* 804ED090 004E85D0  4E 80 00 20 */	blr

.global func_804ED094
func_804ED094:
/* 804ED094 004E85D4  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 804ED098 004E85D8  7C 08 02 A6 */	mflr r0
/* 804ED09C 004E85DC  3C C0 80 69 */	lis r6, lbl_80691CD8@ha
/* 804ED0A0 004E85E0  90 01 00 24 */	stw r0, 0x24(r1)
/* 804ED0A4 004E85E4  38 C6 1C D


import numpy as np

dtype_obj = np.dtype(np.str_)
void_dtype_obj = np.dtype([("f0", np.float64), ("f1", np.float32)])

np.dtype(dtype=np.int64)
np.dtype(int)
np.dtype("int")
np.dtype(None)

np.dtype((int, 2))
np.dtype((int, (1,)))

np.dtype({"names": ["a", "b"], "formats": [int, float]})
np.dtype({"names": ["a"], "formats": [int], "titles": [object]})
np.dtype({"names": ["a"], "formats": [int], "titles": [object()]})

np.dtype([("name", np.str_, 16), ("grades", np.float64, (2,)), ("age", "int32")])

np.dtype(
    {
        "names": ["a", "b"],
        "formats": [int, float],
        "itemsize": 9,
        "aligned": False,
        "titles": ["x", "y"],
        "offsets": [0, 1],
    }
)

np.dtype((np.float64, float))

class Test:
    dtype = np.dtype(float)

np.dtype(Test())

# Methods and attributes
dtype_obj.base
dtype_obj.subdtype
dtype_obj.newbyteorder()
dtype_obj.type
dtype_obj.name
dtype_obj.names

dtype_obj * 0
dtype_obj * 2

0 * dtype_obj
2 * dtype_obj

void_dtype_obj["f0"]
void_dtype_obj[0]
void_dtype_obj[["f0", "f1"]]
void_dtype_obj[["f0"]]


 "collectd/processes"

var groupSet = map[string]bool{}

const (
	diskOctetsRead     = "disk_octets.read"
	diskOctetsWrite    = "disk_octets.write"
	forkRate           = "fork_rate"
	ioOctetsRx         = "io_octets.rx"
	ioOctetsTx         = "io_octets.tx"
	ioOpsRead          = "io_ops.read"
	ioOpsWrite         = "io_ops.write"
	psCode             = "ps_code"
	psCountProcesses   = "ps_count.processes"
	psCountThreads     = "ps_count.threads"
	psCputimeSyst      = "ps_cputime.syst"
	psCputimeUser      = "ps_cputime.user"
	psData             = "ps_data"
	psPagefaultsMajflt = "ps_pagefaults.majflt"
	psPagefaultsMinflt = "ps_pagefaults.minflt"
	psRss              = "ps_rss"
	psStacksize        = "ps_stacksize"
	psStateBlocked     = "ps_state.blocked"
	psStatePaging      = "ps_state.paging"
	psStateRunning     = "ps_state.running"
	psStateSleeping    = "ps_state.sleeping"
	psStateStopped     = "ps_state.stopped"
	psStateZombies     = "ps_state.zombies"
	psVM               = "ps_vm"
)

var metricSet = map[string]monitors.MetricInfo{
	diskOctetsRead:     {Type: datapoint.Counter},
	diskOctetsWrite:    {Type: datapoint.Counter},
	forkRate:           {Type: datapoint.Counter},
	ioOctetsRx:         {Type: datapoint.Counter},
	ioOctetsTx:         {Type: datapoint.Counter},
	ioOpsRead:          {Type: datapoint.Counter},
	ioOpsWrite:         {Type: datapoint.Counter},
	psCode:             {Type: datapoint.Gauge},
	psCountProcesses:   {Type: datapoint.Gauge},
	psCountThreads:     {Type: datapoint.Gauge},
	psCputimeSyst:      {Type: datapoint.Counter},
	psCputimeUser:      {Type: datapoint.Counter},
	psData:             {Type: datapoint.Gauge},
	psPagefaultsMajflt: {Type: datapoint.Counter},
	psPagefaultsMinflt: {Type: datapoint.Counter},
	psRss:              {Type: datapoint.Gauge},
	psStacksize:        {Type: datapoint.Gauge},
	psStateBlocked:     {Type: datapoint.Gauge},
	psStatePaging:      {Type: datapoint.Gauge},
	psStateRunning:     {Type: datapoint.Gauge},
	psStateSleeping:    {Type: datapoint.Gauge},
	psStateStopped:     {Type: datapoint.Gauge},
	psStateZombies:     {Type: datapoint.Gauge},
	psVM:               {Type: datapoint.Gauge},
}

var defaultMetrics = map[string]bool{}

var groupMetricsMap = map[string][]string{}

var monitorMetadata = monitors.Metadata{
	MonitorType:     "collectd/processes",
	DefaultMetrics:  defaultMetrics,
	Metrics:         metricSet,
	SendUnknown:     false,
	Groups:          groupSet,
	GroupMetricsMap: groupMetricsMap,
	SendAll:         true,
}
//go:build linux
// +build linux

package systemd

import (
	"strings"

	"github.com/signalfx/signalfx-agent/pkg/monitors"
	"github.com/signalfx/signalfx-agent/pkg/monitors/subproc"

	"github.com/signalfx/signalfx-agent/pkg/core/config"
	"github.com/signalfx/signalfx-agent/pkg/monitors/collectd"
	"github.com/signalfx/signalfx-agent/pkg/monitors/collectd/python"
)

const (
	activeState = "Activ


up:", *resourceGroup.ID)

	storageAccount, err := createStorageAccount(ctx)
	if err != nil {
		log.Fatal(err)
	}
	log.Println("storage account:", *storageAccount.ID)

	keys, err := regenerateKeyStorageAccount(ctx)
	if err != nil {
		log.Fatal(err)
	}
	for _, v := range keys {
		if *v.KeyName == "key1" {
			log.Println("regenerate key:", *v.KeyName, *v.Value, *v.CreationTime, *v.Permissions)
		}
	}

	workspace, err := createWorkspace(ctx)
	if err != nil {
		log.Fatal(err)
	}
	log.Println("operational insights workspace:", *workspace.ID)

	storageInsight, err := createStorageInsight(ctx, *storageAccount.ID, *keys[0].Value)
	if err != nil {
		log.Fatal(err)
	}
	log.Println("storage insight:", *storageInsight.ID)

	keepResource := os.Getenv("KEEP_RESOURCE")
	if len(keepResource) == 0 {
		err = cleanup(ctx)
		if err != nil {
			log.Fatal(err)
		}
		log.Println("cleaned up successfully.")
	}
}

func createStorageAccount(ctx context.Context) (*armstorage.Account, error) {

	pollerResp, err := accountsClient.BeginCreate(
		ctx,
		resourceGroupName,
		storageAccountName,
		armstorage.AccountCreateParameters{
			Kind: to.Ptr(armstorage.KindStorageV2),
			SKU: &armstorage.SKU{
				Name: to.Ptr(armstorage.SKUNameStandardLRS),
			},
			Location: to.Ptr(location),
			Properties: &armstorage.AccountPropertiesCreateParameters{
				AccessTier: to.Ptr(armstorage.AccessTierCool),
				Encryption: &armstorage.Encryption{
					Services: &armstorage.EncryptionServices{
						File: &armstorage.EncryptionService{
							KeyType: to.Ptr(armstorage.KeyTypeAccount),
							Enabled: to.Ptr(true),
						},
						Blob: &armstorage.EncryptionService{
							KeyType: to.Ptr(armstorage.KeyTypeAccount),
							Enabled: to.Ptr(true),
						},
						Queue: &armstorage.EncryptionService{
							KeyType: to.Ptr(armstorage.KeyTypeAccount),
							Enabled: to.Ptr(true),
						},
						Table: &armstorage.EncryptionService{
							KeyType: to.Ptr(armstorage.KeyTypeAccount),
							Enabled: to.Ptr(true),
						},
					},
					KeySource: to.Ptr(armstorage.KeySourceMicrosoftStorage),
				},
			},
		}, nil)
	if err != nil {
		return nil, err
	}
	resp, err := pollerResp.PollUntilDone(ctx, nil)
	if err != nil {
		return nil, err
	}
	return &resp.Account, nil
}

func regenerateKeyStorageAccount(ctx context.Context) ([]*armstorage.AccountKey, error) {

	regenerateKeyResp, err := accountsClient.RegenerateKey(
		ctx,
		resourceGroupName,
		storageAccountName,
		armstorage.AccountRegenerateKeyParameters{
			KeyName: to.Ptr("key1"),
		},
		nil)
	if err != nil {
		return nil, err
	}

	return regenerateKeyResp.AccountListKeysResult.Keys, nil
}

func createWorkspace(ctx context.Context) (*armoperationalinsights.Workspace, error) {

	pollerResp, err := workspacesClient.BeginCreateOrUpdate(
		ctx,
		resourceGroupName,
		workspaceName,
		armoperationalinsights.Workspace{
			Location:   to.Ptr(location),
			Properties: &armoperationalinsights.WorkspaceProperties{},
		},
		nil,
	)
	if err != nil {
		return nil, err
	}
	resp, err := pollerResp.PollUntilDone(ctx, nil)
	if err != nil {
		return nil, err
	}
	return &


container = nil
	end
	for n = 1, select("#",...) do
		tinsert(path, (select(n, ...)))
	end

	local option = options
	if type(container) == "table" and container.type == "BlizOptionsGroup" and #path > 0 then
		for i = 1, #path do
			option = options.args[path[i]]
		end
		name = format("%s - %s", name, GetOptionsMemberValue("name", option, options, path, appName))
	end

	--if a container is given feed into that
	if container then
		f = container
		f:ReleaseChildren()
		f:SetUserData("appName", appName)
		f:SetUserData("iscustom", true)
		if #path > 0 then
			f:SetUserData("basepath", copy(path))
		end
		local status = AceConfigDialog:GetStatusTable(appName)
		if not status.width then
			status.width =  700
		end
		if not status.height then
			status.height = 500
		end
		if f.SetStatusTable then
			f:SetStatusTable(status)
		end
		if f.SetTitle then
			f:SetTitle(name or "")
		end
	else
		if not self.OpenFrames[appName] then
			f = gui:Create("Frame")
			self.OpenFrames[appName] = f
		else
			f = self.OpenFrames[appName]
		end
		f:ReleaseChildren()
		f:SetCallback("OnClose", FrameOnClose)
		f:SetUserData("appName", appName)
		if #path > 0 then
			f:SetUserData("basepath", copy(path))
		end
		f:SetTitle(name or "")
		local status = AceConfigDialog:GetStatusTable(appName)
		f:SetStatusTable(status)
	end

	self:FeedGroup(appName,options,f,f,path,true)
	if f.Show then
		f:Show()
	end
	del(path)

	if AceConfigDialog.frame.closeAll then
		-- close all is set, but thats not good, since we're just opening here, so force it
		AceConfigDialog.frame.closeAllOverride[appName] = true
	end
end

-- convert pre-39 BlizOptions structure to the new format
if oldminor and oldminor < 39 and AceConfigDialog.BlizOptions then
	local old = AceConfigDialog.BlizOptions
	local newOpt = {}
	for key, widget in pairs(old) do
		local appName = widget:GetUserData("appName")
		if not newOpt[appName] then newOpt[appName] = {} end
		newOpt[appName][key] = widget
	end
	AceConfigDialog.BlizOptions = newOpt
else
	AceConfigDialog.BlizOptions = AceConfigDialog.BlizOptions or {}
end

local function FeedToBlizPanel(widget, event)
	local path = widget:GetUserData("path")
	AceConfigDialog:Open(widget:GetUserData("appName"), widget, unpack(path or emptyTbl))
end

local function ClearBlizPanel(widget, event)
	local appName = widget:GetUserData("appName")
	AceConfigDialog.frame.closing[appName] = true
	AceConfigDialog.frame:SetScript("OnUpdate", RefreshOnUpdate)
end

--- Add an option table into the Blizzard Interface Options panel.
-- You can optionally supply a descriptive name to use and a parent frame to use,
-- as well as a path in the options table.\\
-- If no name is specified, the appName will be used instead.
--
-- If you specify a proper `parent` (by name), the interfa


	assert.Nil(err, "keys_and_cert.PublicKey() returned error with valid data containing certificate")
	_, err = keys_and_cert.SigningPublicKey()
	assert.Nil(err, "keys_and_cert.SigningPublicKey() returned error with valid data containing certificate")
	_, err = keys_and_cert.Certificate()
	assert.Nil(err, "keys_and_cert.Certificate() returned error with valid data containing certificate")
}

func TestReadKeysAndCertWithValidDataWithoutCertificate(t *testing.T) {
	assert := assert.New(t)

	cert_data := make([]byte, 128+256)
	cert_data = append(cert_data, []byte{0x00, 0x00, 0x00}...)
	keys_and_cert, remainder, err := ReadKeysAndCert(cert_data)
	assert.Equal(0, len(remainder))
	assert.Nil(err)

	_, err = keys_and_cert.PublicKey()
	assert.Nil(err, "keys_and_cert.PublicKey() returned error with valid data not containing certificate")
	_, err = keys_and_cert.SigningPublicKey()
	assert.Nil(err, "keys_and_cert.SigningPublicKey() returned error with valid data not containing certificate")
	_, err = keys_and_cert.Certificate()
	assert.Nil(err, "keys_and_cert.Certificate() returned error with valid data not containing certificate")
}

func TestReadKeysAndCertWithValidDataWithCertificateAndRemainder(t *testing.T) {
	assert := assert.New(t)

	cert_data := make([]byte, 128+256)
	cert_data = append(cert_data, []byte{0x05, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x41}...)
	keys_and_cert, remainder, err := ReadKeysAndCert(cert_data)
	if assert.Equal(1, len(remainder)) {
		assert.Equal("A", string(remainder[0]))
	}
	assert.Nil(err)

	_, err = keys_and_cert.PublicKey()
	assert.Nil(err, "keys_and_cert.PublicKey() returned error with valid data containing certificate")
	_, err = keys_and_cert.SigningPublicKey()
	assert.Nil(err, "keys_and_cert.SigningPublicKey() returned error with valid data containing certificate")
	_, err = keys_and_cert.Certificate()
	assert.Nil(err, "keys_and_cert.Certificate() returned error with valid data containing certificate")
}

func TestReadKeysAndCertWithValidDataWithoutCertificateAndRemainder(t *testing.T) {
	assert := assert.New(t)

	cert_data := make([]byte, 128+256)
	cert_data = append(cert_data, []byte{0x00, 0x00, 0x00, 0x41}...)
	keys_and_cert, remainder, err := ReadKeysAndCert(cert_data)
	if assert.Equal(1, len(remainder)) {
		assert.Equal("A", string(remainder[0]))
	}
	assert.Nil(err)

	_, err = keys_and_cert.PublicKey()
	assert.Nil(err, "keys_and_cert.PublicKey() returned error with valid data not containing certificate")
	_, err = keys_and_cert.SigningPublicKey()
	assert.Nil(err, "keys_and_cert.SigningPublicKey() returned error with valid data not containing certificate")
	_, err = keys_and_cert.Certificate()
	assert.Nil(err, "keys_and_cert.Certificate() returned error with valid data not containing certificate")
}
package chart

import (
	"bytes"
	"fmt"
	"path"
	"strings"

	simontype "github.com/hkust-adsl/kubernetes-scheduler-simulator/pkg/type"
	"helm.sh/helm/v3/pkg/chart"
	"helm.sh/helm/v3/pkg/chart/loader"
	"helm.sh/helm/v3/pkg/chartutil"
	"helm.sh/helm/v3/pkg/engine"
	"helm.sh/helm/v3/pkg/


-- The object is a polygon.
	elseif self.polygon then
		love.graphics.push()
		love.graphics.translate(0,1)
		love.graphics.setColor(0, 0, 0, a)
		love.graphics.polygon( "line", unpack(di) )
		love.graphics.pop()
		love.graphics.setColor(r,g,b,a)
		love.graphics.polygon( "line", unpack(di) )

	-- The object is a tile object. Draw the tile.
	elseif self.gid then
		local tile = self.layer.map.tiles[self.gid]
		tile:draw(self.x, self.y - tile.height)

	-- Map is isometric. Draw a parallelogram.
	elseif self.layer.map.orientation == "isometric" then
		love.graphics.setColor(r, g, b, a/5)
		love.graphics.polygon("fill", unpack(di))

		love.graphics.push()
		love.graphics.translate(0,1)
		love.graphics.setColor(0, 0, 0, a)
		love.graphics.polygon("line", unpack(di))
		love.graphics.pop()

		love.graphics.setColor(r,g,b,a)
		love.graphics.polygon("line", unpack(di))

	-- Map is orthogonal. Draw a rectangle.
	else
		love.graphics.setColor(r, g, b, a/5)
		love.graphics.rectangle("fill", unpack(di))

		love.graphics.setColor(0, 0, 0, a)
		love.graphics.push()
		love.graphics.translate(1,1)
		love.graphics.rectangle("line", unpack(di))
		love.graphics.print(self.name, di.x, di.y-20)
		love.graphics.pop()

		love.graphics.setColor(r,g,b,a)
		love.graphics.rectangle("line", unpack(di))
		love.graphics.print(self.name, di.x,


,
      "auditTrail": "Considere registrar esta verificação..."
    }
  }
}
```

### 📋 Casos de Uso

- **Exchanges de Criptomoedas**: Verificação de conformidade para trocas atômicas
- **Instituições Financeiras**: Documentação regulatória para transações DeFi
- **Auditores**: Evidências criptográficas para relatórios de auditoria
- **Desenvolvedores**: Integração de verificação em aplicações descentralizadas

Para mais informações, consulte a [documentação completa do Flash Compliance](flash-compliance/README.md).

## 🙏 Agradecimentos

### Tecnologias e Padrões
- BIP340 (Assinaturas Schnorr)
- BIP341 (Taproot)
- Protocolo Nostr
- [NIP 455: Trocas Atômicas de Assinaturas](https://github.com/vstabile/nips/blob/atomic-signature-swaps/XX.md)

### Ferramentas e Bibliotecas
- [btcd](https://github.com/btcsuite/btcd) - Implementação Bitcoin em Go
- [go-nostr](https://github.com/nbd-wtf/go-nostr) - Cliente Nostr para Go
- [Express](https://expressjs.com/) - Framework web para Node.js
- [Gemini AI](https://ai.google.dev/) - Modelos de IA generativa do Google

### Eventos e Comunidade
- [MIT Bitcoin Hackathon](https://mitbitcoin.dev/) - Onde o TANOS foi originalmente desenvolvido
- Comunidade Bitcoin e Nostr pelo apoio e feedback

### Contribuidores
- Equipe de desenvolvimento do TANOS
- Revisores e testadores
- Todos que contribuíram com código, ideias e feedback
# Algoritmos Quânticos Implementados

## Algoritmo de Deutsch-Jozsa
O algoritmo de Deutsch-Jozsa é um dos primeiros exemplos de um algoritmo quântico que demonstra uma vantagem exponencial sobre algoritmos clássicos. Ele determina se uma função é constante (retorna o mesmo valor para todas as entradas) ou balanceada (retorna 0 para metade das entradas e 1 para a outra metade).

### Implementação
- Utiliza um registro quântico com n+1 qubits
- Aplica portas Hadamard em todos os qubits
- Implementa um oráculo que codifica a função
- Aplica portas Hadamard novamente
- Mede os qubits para determinar o resultado

## Algoritmo de Grover
O algoritmo de Grover é um algoritmo de busca quântica que oferece uma aceleração quadrática sobre algoritmos clássicos para busca não estruturada.

### Implementação
- Utiliza um registro quântico com n qubits
- Aplica uma superposição uniforme usando portas Hadamard
- Implementa um oráculo que marca o estado alvo
- Aplica a difusão de Grover
- Repete os passos do oráculo e difusão O(√N) vezes

## Algoritmo de Shor
O algoritmo de Shor é um algoritmo quântico para fatoração de números inteiros, que tem implicações significativas para a criptografia.

### Implementação
- Utiliza dois registros quânticos
- Implementa a transformada de Fourier quântica
- Aplica operações modulares
- Realiza medições para encontrar os fatores

## Algoritmo de Bernstein-Vazirani
O algoritmo de Bernstein-Vazirani é um algoritmo quântico que demonstra uma vantagem exponencial sobre algoritmos clássicos para encontrar uma string ocult


Release the renewal lock.

     *
     *
Delivers any received master token to the blocking queue. This may be
     * a null value if an error message was received or if the received message
     * does not contain a master token for the local entity.

     *
     *
If no message was received a null master token will be delivered.

     *
     *
This method is only used from trusted network clients and peer-to-
     * peer entities.

     *
     * @param ctx MSL context.
     * @param queue caller's blocking queue.
     * @param message received message. May be null if no message was received.
     */
    void releaseRenewalLock(std::shared_ptr<util::MslContext> ctx,
            std::shared_ptr<util::BlockingQueue<tokens::MasterToken>> queue,
            std::shared_ptr<MessageInputStream> message);

    /**
     * Send an error response over the provided output stream.
     *
     * @param ctx MSL context.
     * @param debugCtx message debug context.
     * @param requestHeader message the error is being sent in response to. May
     *        be {@code null}.
     * @param messageId request message ID. May be {@code null}.
     * @param error the MSL error.
     * @param userMessage localized user-consumable error message. May be
     *        {@code null}.
     * @param out message output stream.
     * @throws MslEncodingException if there is an error encoding the message.
     * @throws MslCryptoException if there is an error encrypting or signing
     *         the message.
     * @throws MslEntityAuthException if there is an error with the entity
     *         authentication data.
     * @throws MslMessageException if no entity authentication data was
     *         returned by the MSL context.
     * @throws IOException if there is an error sending the error response->
     */
    void sendError(std::shared_ptr<util::MslContext> ctx, std::shared_ptr<MessageDebugContext> debugCtx,
            std::shared_ptr<MessageHeader> requestHeader, int64_t messageId,
            const MslError& error, const std::string& userMessage, std::shared_ptr<io::OutputStream> out);

private: // attributes

    /** MSL executor. */
    std::shared_ptr<util::Executor> executor;

    /** Message factory. */
    std::shared_ptr<MessageFactory> messageFactory;
    /** Error message registry. */
    std::shared_ptr<ErrorMessageRegistry> messageRegistry;
    /** Filter stream factory. May be null. */
    std::shared_ptr<FilterStreamFactory> filterFactory;

    /**
     * Map tracking outstanding renewable messages by MSL context. The blocking
     * queue is used to wait for a master token from a different thread if the
     * message requires one.
     */
    util::ConcurrentHashMap<util::MslContext, util::BlockingQueue<tokens::MasterToken>> renewingContexts;
    /** Dummy master token used to release the renewal lock. */
    std::shared_ptr<tokens::MasterToken> NULL_MASTER_TOKEN;

    /**
     * Map of in-flight master token read-write locks by MSL context and master
     * token.
     */
    util::ConcurrentHashMap<MslContextMasterTokenKey, util::ReadWriteLock> masterTokenLocks;
};

}}} // namespace netflix::msl::msg

#endif


cs.to_int(&(p)->root)
#define T1_ToFixed(p, t) (p)->root.funcs.to_fixed(&(p)->root, t)

#define T1_ToCoordArray(p, m, c) \
  (p)->root.funcs.to_coord_array(&(p)->root, m, c)
#define T1_ToFixedArray(p, m, f, t) \
  (p)->root.funcs.to_fixed_array(&(p)->root, m, f, t)
#define T1_ToToken(p, t) (p)->root.funcs.to_token(&(p)->root, t)
#define T1_ToTokenArray(p, t, m, c) \
  (p)->root.funcs.to_token_array(&(p)->root, t, m, c)

#define T1_Load_Field(p, f, o, m, pf) \
  (p)->root.funcs.load_field(&(p)->root, f, o, m, pf)

#define T1_Load_Field_Table(p, f, o, m, pf) \
  (p)->root.funcs.load_field_table(&(p)->root, f, o, m, pf)

FT_LOCAL(FT_Error)
T1_New_Parser(T1_Parser parser, FT_Stream stream, FT_Memory memory,
              PSAux_Service psaux);

FT_LOCAL(FT_Error)
T1_Get_Private_Dict(T1_Parser parser, PSAux_Service psaux);

FT_LOCAL(void)
T1_Finalize_Parser(T1_Parser parser);

FT_END_HEADER

#endif /* __T1PARSE_H__ */

/* END */


ibn is the name of an attribute in the returned Object',
  parseValue(value: string) {
    return deserialize(RelayOrderBy, value); // value from the client input variables
  },
  serialize(value: RelayOrderBy<any>) {
    return serialize(value); // sent to client
  },
  parseLiteral(ast: ValueNode, variables) {
    if (ast.kind === Kind.OBJECT) {
      // this is ugly and needs to be unwrapped from the ast....
      // we pick out what we are given the things we know
      const value = Object.create(null);
      ast.fields.forEach(field => {
        switch (field.name.value) {
          case 'keys': {
            if (field.value.kind === Kind.LIST) {
              value['keys'] = field.value.values.map(valueNode => {
                if (valueNode.kind === Kind.LIST) {
                  return valueNode.values.map(entry => {
                    if (entry.kind === Kind.STRING) {
                      return entry.value;
                    } else {
                      return '';
                    }
                  });
                } else {
                  return [];
                }
              });
            }
          }
        }
      });
      return plainToClass(RelayOrderBy, value); // value from the client query
    }
    return null;
  }
});
import fs from "fs";
import path from "path";
import * as ostream from "../index/ObjectStreams";

it("can write one object", () => {
    const original = {
        some: "fancy",
        token: 42,
    };
    const memStream = new ostream.MemoryDuplexStream();
    const entityStream = new ostream.EntityToBytesTransformStream();
    entityStream.pipe(memStream);

    entityStream.write(original);
    entityStream.end();
    memStream.end();

    const writtenData = memStream.getBuffer();
    expect(writtenData.length).toEqual(35);
});

it("can write into memory stream", () => {
    const memStream = new ostream.MemoryDuplexStream();
    memStream.write("Hello ");
    memStream.write("World!");
    memStream.end();

    const writtenData = memStream.getBuffer();
    expect(writtenData.length).toEqual(12);
});

it("can write much into memory stream", () => {
    const dataset1 = Buffer.from(Array.from(Array(1234).keys()));
    const dataset2 = Buffer.from(Array.from(Array(5678).keys()));
    const memStream = new ostream.MemoryDuplexStream();
    memStream.write(dataset1);
    memStream.write(dataset2);
    memStream.end();

    const writtenData = memStream.getBuffer();
    expect(writtenData.length).toEqual(1234 + 5678);
});

it("can read in chunks from memory stream", () => {
    const memStream = new ostream.MemoryDuplexStream();
    memStream.write("Hello ");
    memStream.write("World!");
    const data1 = memStream.read(6).toString();
    const data2 = memStream.read(6).toString();
    memStream.end();

    expect(data1).toEqual("Hello ");
    expect(data2).toEqual("World!");
});

it("can read from memory stream", (done) => {
    const memStream = new ostream.MemoryDuplexStream();
    memStream.write("Hello ");
    memStream.write("World!");

    memStream.on("readable", () => {
        expect(memStream.read().toString()).toEqual("Hello World!");
        done();
    });
});

// borrowed from https://github.com/doanythingfordethklok/memory-stream/
it("can stream file to memory", (done) => {
    const source = path.join(__dirname, "./ObjectStreams.source1.txt");
    const gold = fs.readFileSync(source);
    const rs = fs.createReadStream(source);
    const ws = new ostream.MemoryDuplexStream();

    ws.on("finish", ()


6]는 1984년 이를 인용하면서 '자음에서는 상당수가 같고, 모음은 10자가 꼭 같다는 것이다'라고 썼다. 그는 구자라트 문자가 가림토에서 비롯되었다고 주장했다.[37][38]

그러나 구자라트 문자는 문자 구성상 자모로 완전히 분리되는 한글과는 달리 모든 자음이 딸림 모음을 수반하는 아부기다이며, 데바나가리 문자에서 수직선을 제거한 데바나가리 파생문자로서 다른 인도계 여러 문자와 친족 관계가 명확하게 밝혀져 있기 때문에 이는 구자라트 문자의 특정 글자체와 한글 사이의 표면적 유사성에 대한 착오일 뿐이다.[39]

다른 언어에서의 한글 사용
한글은 2009년에 처음으로 인도네시아의 소수 민족인 찌아찌아족의 언어인 찌아찌아어를 표기하는데 사용되었다.

이밖에도 한국에서는 한글을 표기 문자로 보급하기 위하여 노력하고 있으며 2012년 솔로몬제도의 토착어를 한글로 표기하여 교육하는 활동이 시작됐다. 2012년 10월부터 시행된 것은 2개 언어이며 결과에 따라 솔로몬제도 전역으로 확대할 예정이다.[40]

간혹, 영어 발음을 정확하게 표기하기 위해 옛 한글 등을 부활시킨 표기법을 연구하는 경우도 있으나, 이 역시 개인 연구자에 의한 것이다. 그리고 한국인이 아닌 사람이 만든 인공어618-Vuro나 인공 문자 井卜文(Jingbu Script) 등에서 일부 한글 또는 한글을 모티브로 한 문자를 개인 수준에서 사용한 예를 볼 수 있다.

�


itemModel()->index(row, 0);
    if (!index.isValid())
        return false;

    selectionModel()->setCurrentIndex(index, QItemSelectionModel::ClearAndSelect);

    this->updateIndex();
    return true;
}

QItemSelectionModel *ListField::selectionModel() const
{
    return m_selectionModel;
}

void ListField::setSelectionModel(QItemSelectionModel *selectionModel)
{
    m_selectionModel = selectionModel;
}

QSize ListField::maxIconSize() const
{
    return m_maxIconSize;
}

void ListField::addPossibleIconSize(const QIcon &icon)
{
    const QSize iconSize = icon.availableSizes().value(0);
    if (iconSize.height() > m_maxIconSize.height())
        m_maxIconSize = iconSize;
}

void ListField::updateIndex()
{
    if (!widget()->isEnabled() && m_disabledIndex >= 0 && m_savedIndex < 0) {
        m_savedIndex = selectionModel()->currentIndex().row();
        selectionModel()->setCurrentIndex(itemModel()->index(m_disabledIndex, 0), QItemSelectionModel::ClearAndSelect);
    } else if (widget()->isEnabled() && m_savedIndex >= 0) {
        selectionModel()->setCurrentIndex(itemModel()->index(m_savedIndex, 0), QItemSelectionModel::ClearAndSelect);
        m_savedIndex = -1;
    }
}

void ListField::fromSettings(const QVariant &value)
{
    for (decltype(m_itemList)::size_type i = 0; i < m_itemList.size(); ++i) {
        if (m_itemList.at(i)->data(ValueRole) == value) {
            m_index = int(i);
            break;
        }
    }
}

QVariant ListField::toSettings() const
{
    const int idx = selectionModel()->currentIndex().row();
    return idx >= 0 ? m_itemList.at(idx)->data(ValueRole) : QVariant();
}

void ComboBoxField::setup(JsonFieldPage *page, const QString &name)
{
    auto w = qobject_cast<QComboBox *>(widget());
    QTC_ASSERT(w, return);
    w->setModel(itemModel());
    w->setInsertPolicy(QComboBox::NoInsert);

    QSizePolicy s = w->sizePolicy();
    s.setHorizontalPolicy(QSizePolicy::Expanding);
    w->setSizePolicy(s);

    setSelectionModel(w->view()->selectionModel());

    // the selectionModel does not behave like expected and wanted - so we block signals here
    // (for example there was some losing focus thing when hovering over items, ...)
    selectionModel()->blockSignals(true);
    QObject::connect(w, &QComboBox::activated, [w, this](int index) {
        w->blockSignals(true);
        selectionModel()->clearSelection();

        selectionModel()->blockSignals(false);
        selectionModel()->setCurrentIndex(w->model()->index(index, 0),
            QItemSelectionModel::ClearAndSelect);
        selectionModel()->blockSignals(true);
        w->blockSignals(false);
    });
    page->registerObjectAsFieldWithName<QComboBox>(name, w, &QComboBox::activated, [w] {
        return w->currentData(ValueRole);
    });
    QObject::connect(selectionModel(), &QItemSelectionModel::selectionChanged, page, [page]() {
        emit page->completeChanged();
    });
}

QWidget *ComboBoxField::createWidget(const QString & /*displayName*/, JsonFieldPage * /*page*/)
{
    const auto comboBox = new QComboBox;
    QObject::connect(comboBox, &QComboBox::activated, [this] { setHasUserChanges(); });
    return comboBox;
}

void ComboBoxField::initializeData(MacroExpander *expander)
{
    ListField::initializeData(expander);
    // refresh also the current text of the combobox
    auto w = qobject_cast<QComboBox *>(widget());
    const int row = selectionModel()->currentIndex().row();
    if (row < w->count() &&


Companion.skeySort
import vc.data.TACCmd.Simple.AssertCmd
import vc.data.TACCmd.Simple.AssigningCmd.AssignExpCmd
import verifier.TACVerifier

// these global fields are "borrowed" form [StorageAnalysisTest]

/* keeping this for later usage in tests
private val mapping = """
    contract $contractName {
        mapping (uint256 => uint256) public my_mapping;

        function test(uint256 x, uint256 y) public {
            my_mapping[x] = y;
        }
    }
""".trimIndent()
 */

/*
  loader doesn't like this, gives a message like
    `Found a cycle in our graph at node "754_1009_0_0_0_0_0_0"`
     (probably due to the loop when hashing the bytes array)

private val bytes = """
    contract $contractName {
        bytes public my_bytes;

        function test() public returns (bytes32) {
            return keccak256(abi.encodePacked(my_bytes));
        }
    }
""".trimIndent()
 */

private val ghostMapStore =
    run {
        val m0 = TACSymbol.Var("m0", Tag.GhostMap(listOf(Tag.Bit256), Tag.Bit256))
        val m1 = TACSymbol.Var("m1", Tag.GhostMap(listOf(Tag.Bit256), Tag.Bit256))
        val s = TACSymbol.Var("s", Tag.Bit256)
        val v = TACSymbol.Var("v", Tag.Bit256)

        val x = TACSymbol.Var("x", Tag.Bit256)
        val a = TACSymbol.Var("a", Tag.Bool)

        val symbolTable = TACSymbolTable().copy(tags = Tags(setOf(m0, m1, s, v, x, a)), userDefinedTypes = setOf(skeySort))
        val txf = TACExprFactTypeChecked(symbolTable)

        codeFromListOfCommands(
            StartBlock,
            listOf(
                AssignExpCmd(s, txf { SimpleHash(number(32), listOf(number(0))) }),
                AssignExpCmd(m1, txf { Store(m0.asSym(), s.asSym(), v = v.asSym()) }),
                AssignExpCmd(x, txf { Select(m1.asSym(), s.asSym()) }),
                AssignExpCmd(a, txf { x.asSym() eq v.asSym() }),
                AssertCmd(a, "no msg"),
            ),
            "bytes"
        ).copy(symbolTable = symbolTable)
    }

/* keeping this for later usage in tests
private val bytes =
    run {
        val x = TACSymbol.Var("x", Tag.Bit256)
        val m = TACSymbol.Var("m", Tag.ByteMap)
        val l = TACSymbol.Var("l", Tag.Bit256)
        val a = TACSymbol.Var("a", Tag.Bool)

        var symbolTable = TACSymbolTable().copy(tags = Tags(setOf(x, m, l, a)))
        val txf = TACExprFactTypeChecked(symbolTable)

        val (hashExp, newAuxVars, newCmds) = TACExpr.SimpleHash.fromByteMapRange(
            m,
            TACSymbol.lift(0).asSym(),
            l.asSym(), // TACSymbol.lift(196).asSym(),
        )
        symbolTable = symbolTable.mergeDecls(newAuxVars)

        codeFromListOfCommands(
            StartBlock,
            listOf(
                AssignExpCmd(x, hashExp),
                *newCmds.toTypedArray(),
                // these two statements just ensure that TACSimpleSimpleSSA doesn't optimize the previous one away.
                AssignExpCmd(a, txf.makeTyped { x.asSym() ge number(0) }),
                AssertCmd(a, "no msg"),

                ),
            "bytes"
        ).copy(symbolTable = symbolTable)
    }
 */

@SolidityConfig


000000, counts);
            seg.CopyNumber = 2;
            allSegments.Add(seg);

            // Chr3 has three segments that all merge to 1 big one:
            seg = new CanvasSegment("chr3", 1000000, 2000000, counts);
            seg.CopyNumber = 2;
            allSegments.Add(seg);
            seg = new CanvasSegment("chr3", 2000000, 3000000, counts);
            seg.CopyNumber = 2;
            allSegments.Add(seg);
            seg = new CanvasSegment("chr3", 3000000, 4000000, counts);
            seg.CopyNumber = 2;
            allSegments.Add(seg);

            var mergedSegments = CanvasSegment.MergeSegments(allSegments, 50000, 10000);
            var segmentsByChromosome = CanvasSegment.GetSegmentsByChromosome(mergedSegments);
            Assert.Equal(3, segmentsByChromosome["chr1"].Count);
            Assert.Equal(3, segmentsByChromosome["chr2"].Count);
            Assert.Single(segmentsByChromosome["chr3"]);
        }

        [Fact]
        public void TestReadSegments()
        {
            var partitioned = "";
            partitioned += "chr22\t1\t10\t14.00\t0\n";
            partitioned += "chr22\t10\t30\t31.00\t1\n";
            partitioned += "chr22\t30\t40\t6.00\t2\n";
            var stringReader = new StringReader(partitioned);
            Segments segments;
            using (var reader = new GzipOrTextReader(stringReader))
            {
                segments = Segments.ReadSegments(reader);
            }

            Assert.Equal(segments.GetSegmentsForChromosome("chr22"), segments.AllSegments);
            var confidenceInterval = segments.AllSegments.First().StartConfidenceInterval;
            AssertConfidenceInterval(-5, 5, confidenceInterval);

            confidenceInterval = segments.AllSegments.First().EndConfidenceInterval;
            AssertConfidenceInterval(-5, 10, confidenceInterval);

            confidenceInterval = segments.AllSegments[1].StartConfidenceInterval;
            AssertConfidenceInterval(-5, 10, confidenceInterval);

            confidenceInterval = segments.AllSegments[1].EndConfidenceInterval;
            AssertConfidenceInterval(-10, 5, confidenceInterval);

            confidenceInterval = segments.AllSegments.Last().StartConfidenceInterval;
            AssertConfidenceInterval(-10, 5, confidenceInterval);

            confidenceInterval = segments.AllSegments.Last().EndConfidenceInterval;
            AssertConfidenceInterval(-5, 5, confidenceInterval);
        }

        [AssertionMethod]
        private void AssertConfidenceInterval(int expectedLower, int expectedUpper, Tuple<int, int> interval)
        {
            Assert.Equal(expectedLower, interval.Item1);
            Assert.Equal(expectedUpper, interval.Item2);
        }

        [Fact]
        public void TestReadFrequencies()
        {
            var intervals = new List<BedInterval>
            {
                new BedInterval(1, 50),
                new BedInterval(51, 150),
            };
            const string chr = "chr22";
            var intervalsByChromosome = new Dictionary<string, List<BedInterval>> { { chr, intervals } };
            var variantCounts = "";
            variantCo


public static CheckAABB(object1: objects.GameObject, object2: objects.GameObject) {
            let P1: math.Vec2 = new math.Vec2(object1.x, object1.y);
            let P2: math.Vec2 = new math.Vec2(object2.x, object2.y);
            let effect = new objects.Effect("Laser_Hit", object1.x + 10, object1.y - object1.halfH);
            effect.scaleX *= 2;
            effect.scaleY *= 2;

            // CHECK ALL BOUNDS
            if((object1.x + object1.halfW) > (object2.x - object2.halfW) &&
                (object1.x - object1.halfW) < (object2.x + object2.halfW) &&
                (object1.y + object1.halfH) > (object2.y - object2.halfH) &&
                (object1.y - object1.halfH) < (object2.y + object2.halfH))
                {

                    switch(object2.name) {
                        case "Enemy1":
                        case "Enemy2":
                        case "Enemy3":
                        case "Enemy5":
                        case "Enemy6":
                        case "Enemy7":
                        case "Enemy9":
                        case "Enemy10":
                        case "Enemy11":
                            managers.Game.hud.Score += Math.round(50 * Math.pow(1.01, managers.Game.hud.ScoreMult));
                            managers.Game.highscore = managers.Game.hud.Score
                            managers.Game.hud.ScoreMult += 1;
                            let hit1 = createjs.Sound.play("hit");
                            hit1.volume = 0.2;
                            managers.Game.currentSceneObject.removeChild(object1)
                            managers.Game.currentSceneObject.addChild(effect);
                            object2.Reset();
                        break;
                        case "Enemy4":
                        case "Enemy8":
                        case "Enemy12":
                        case "Enemy13":
                            managers.Game.hud.Score += Math.round(50 * Math.pow(1.01, managers.Game.hud.ScoreMult));
                            managers.Game.currentSceneObject.addChild(effect);
                            managers.Game.boss1Hp -= 1;
                            let hit2 = createjs.Sound.play("hit");
                            hit2.volume = 0.2;
                            object1.Reset()
                            console.log(managers.Game.boss1Hp)
                            if(managers.Game.boss1Hp <= 0){
                                managers.Game.boss1IsDead = true;
                                managers.Game.hud.Score += Math.round(100000 * Math.pow(1.01, managers.Game.hud.ScoreMult));
                            }
                        break;
                        case "Ship1":
                        case "Ship2":
                        case "Ship3":
                            //console.log("Player Hit");
                            //let death = createjs.Sound.play("playerDeath");
                            //death.volume = 0.5;
                            //object1.Reset();
                            //managers.Game.hud.Lives -= 1
                            //managers.Game.hud.ScoreMult = 0;


s
		/// Level: 28
		/// Class: Armor
		/// </summary>
		SuperiorLeggings = 9808,
		/// <summary>
		/// Chest
		/// Level: 28
		/// Class: Armor
		/// </summary>
		SuperiorTunic = 9809,
		/// <summary>
		/// Feet
		/// Level: 25
		/// Class: Armor
		/// </summary>
		FortifiedBoots = 9810,
		/// <summary>
		/// Wrist
		/// Level: 24
		/// Class: Armor
		/// </summary>
		FortifiedBracers = 9811,
		/// <summary>
		/// Cloak
		/// Level: 22
		/// Class: Armor
		/// </summary>
		FortifiedCloak = 9812,
		/// <summary>
		/// Hand
		/// Level: 25
		/// Class: Armor
		/// </summary>
		FortifiedGauntlets = 9813,
		/// <summary>
		/// Waist
		/// Level: 24
		/// Class: Armor
		/// </summary>
		FortifiedBelt = 9814,
		/// <summary>
		/// Legs
		/// Level: 25
		/// Class: Armor
		/// </summary>
		FortifiedLeggings = 9815,
		/// <summary>
		/// Shield
		/// Level: 25
		/// Class: Armor
		/// </summary>
		FortifiedShield = 9816,
		/// <summary>
		/// Shoulder
		/// Level: 26
		/// Class: Armor
		/// </summary>
		FortifiedSpaulders = 9817,
		/// <summary>
		/// Chest
		/// Level: 25
		/// Class: Armor
		/// </summary>
		FortifiedChain = 9818,
		/// <summary>
		/// Chest
		/// Level: 34
		/// Class: Armor
		/// </summary>
		DurableTunic = 9819,
		/// <summary>
		/// Feet
		/// Level: 31
		/// Class: Armor
		/// </summary>
		DurableBoots = 9820,
		/// <summary>
		/// Wrist
		/// Level: 30
		/// Class: Armor
		/// </summary>
		DurableBracers = 9821,
		/// <summary>
		/// Cloak
		/// Level: 29
		/// Class: Armor
		/// </summary>
		DurableCape = 9822,
		/// <summary>
		/// Hand
		/// Level: 31
		/// Class: Armor
		/// </summary>
		DurableGloves = 9823,
		/// <summary>
		/// Shoulder
		/// Level: 32
		/// Class: Armor
		/// </summary>
		DurableShoulders = 9824,
		/// <summary>
		/// Legs
		/// Level: 33
		/// Class: Armor
		/// </summary>
		DurablePants = 9825,
		/// <summary>
		/// Robe
		/// Level: 34
		/// Class: Armor
		/// </summary>
		DurableRobe = 9826,
		/// <summary>
		/// Waist
		/// Level: 30
		/// Class: Armor
		/// </summary>
		ScaledLeatherBelt = 9827,
		/// <summary>
		/// Feet
		/// Level: 31
		/// Class: Armor
		/// </summary>
		ScaledLeatherBoots = 9828,
		/// <summary>
		/// Wrist
		/// Level: 29
		/// Class: Armor
		/// </summary>
		ScaledLeatherBracers = 9829,
		/// <summary>
		/// Shield
		/// Level: 32
		/// Class: Armor
		/// </summary>
		ScaledShield = 9830,
		/// <summary>
		/// Cloak
		/// Level: 29
		/// Class: Armor
		/// </summary>
		ScaledCloak = 9831,
		/// <summary>
		/// Hand
		/// Level: 31
		/// Class: Armor
		/// </summary>
		Sc


ne-height: 40px;
			margin: 0 0 4px
		}

		.gamma--hurrN .article-text h1 {
			font-size: 38px;
			line-height: 42px
		}

		.article-text h2 {
			margin: 0 0 16px;
			font-size: 1.1em
		}

		.article-text h3 {
			margin-bottom: 10px;
			padding: 4px 8px;
			font-size: 1.1em;
			background-color: #333;
			color: #fff
		}

		.article-text p {
			min-height: 0
		}

		.article-text p.scrollText {
			font-weight: bold;
			margin: 0 0 2px
		}

		.article-text ul,
		.article-text ol {
			margin-bottom: 8px;
			padding: 4px 0 4px 16px
		}

		.article-text ul li,
		.article-text ol li {
			padding: 2px 0
		}

		.article-text ul {
			list-style-type: disc
		}

		.article-text ul li {
			list-style: disc
		}

		.article-text ol {
			list-style-type: decimal
		}

		.article-text ol li {
			list-style: decimal
		}

		.article-text a:hover {
			text-decoration: underline
		}

		.article-text>ul:first-of-type {
			font-size: 16px;
			line-height: 22px
		}

		.article-text>ul:first-of-type span {
			font-size: 1em !important
		}

		.article-text .sponsored-by,
		.article-text .cc-asset-content .sponsored-by {
			font-size: 17px
		}

		.article-text .byline-plain,
		.article-text .byline-fancy {
			font-size: 14px;
			line-height: 1;
			margin-bottom: 4px
		}

		.article-text .byline-plain a,
		.article-text .byline-fancy a {
			color: #004db3
		}

		.article-text .author-section {
			padding-top: 11px;
			border-top: 1px solid #e3e3e3
		}

		.article-text .byline-plain .author,
		.article-text .byline-fancy .author,
		.article-text .byline-fancy .paper {
			text-transform: uppercase
		}

		.article-text .byline-section {
			font-size: 14px;
			line-height: 1;
			margin-bottom: 8px;
			color: #666
		}

		.article-text .justify {
			text-align: justify
		}

		.article-text #articleIconLinksContainer {
			margin-bottom: 16px;
			padding: 4px 0;
			border-color: #e3e3e3
		}

		.article-text #articleIconLinksContainer .share-count span {
			font-size: 12px;
			line-height: 1
		}

		.article-text #articleIconLinksContainer .comments-count .count-number {
			height: 32px
		}

		.article-text #articleIconLinksContainer .comments-count .count-text {
			width: 96px
		}

		.article-text.cc-asset-content .byline-plain {
			margin-bottom: 4px
		}

		.article-text.cc-asset-content .byline-section {
			margin-bottom: 8px
		}

		.gamma .article-text>ul:first-of-type {
			font-size: 18px;
			line-height: 24px
		}

		.gamma .article-text .byline-plain,
		.gamma .article-text .byline-fancy {
			font-size: 16px
		}

		.shareArticles h3.social-links-title {
			border-


imitive->indices, k);
				}
			}
			mesh.UpdateOpenGLBuffers();
		}
	}

	return result;
} // End of the LoadMeshes function
#include "quat.h"
#include <cmath>
#include <iostream>

quat angleAxis(float angle, const vec3& axis) {
	vec3 norm = normalized(axis);
	float s = sinf(angle * 0.5f);

	return quat(
		norm.x * s,
		norm.y * s,
		norm.z * s,
		cosf(angle * 0.5f)
	);
}

quat fromTo(const vec3& from, const vec3& to) {
	vec3 f = normalized(from);
	vec3 t = normalized(to);

	if (f == t) {
		return quat();
	}
	else if (f == t * -1.0f) {
		vec3 ortho = vec3(1, 0, 0);
		if (fabsf(f.y) < fabsf(f.x)) {
			ortho = vec3(0, 1, 0);
		}
		if (fabsf(f.z) < fabs(f.y) && fabs(f.z) < fabsf(f.x)) {
			ortho = vec3(0, 0, 1);
		}

		vec3 axis = normalized(cross(f, ortho));
		return quat(axis.x, axis.y, axis.z, 0);
	}

	vec3 half = normalized(f + t);
	vec3 axis = cross(f, half);

	return quat(
		axis.x,
		axis.y,
		axis.z,
		dot(f, half)
	);
}

vec3 getAxis(const quat& quat) {
	return normalized(vec3(quat.x, quat.y, quat.z));
}

float getAngle(const quat& quat) {
	return 2.0f * acosf(quat.w);
}

quat operator+(const quat& a, const quat& b) {
	return quat(
		a.x + b.x,
		a.y + b.y,
		a.z + b.z,
		a.w + b.w
	);
}

quat operator-(const quat& a, const quat& b) {
	return quat(
		a.x - b.x,
		a.y - b.y,
		a.z - b.z,
		a.w - b.w
	);
}

quat operator*(const quat& a, float b) {
	return quat(
		a.x * b,
		a.y * b,
		a.z * b,
		a.w * b
	);
}

quat operator-(const quat& q) {
	return quat(
		-q.x,
		-q.y,
		-q.z,
		-q.w
	);
}

bool operator==(const quat& left, const quat& right) {
	return (fabsf(left.x - right.x) <= QUAT_EPSILON && fabsf(left.y - right.y) <= QUAT_EPSILON && fabsf(left.z - right.z) <= QUAT_EPSILON && fabsf(left.w - left.w) <= QUAT_EPSILON);
}

bool operator!=(const quat& a, const quat& b) {
	return !(a == b);
}

bool sameOrientation(const quat& left, const quat& right) {
	return (fabsf(left.x - right.x) <= QUAT_EPSILON && fabsf(left.y - right.y) <= QUAT_EPSILON && fabsf(left.z - right.z) <= QUAT_EPSILON && fabsf(left.w - left.w) <= QUAT_EPSILON)
		|| (fabsf(left.x + right.x) <= QUAT_EPSILON && fabsf(left.y + right.y) <= QUAT_EPSILON && fabsf(left.z + right.z) <= QUAT_EPSILON && fabsf(left.w + left.w) <= QUAT_EPSILON);
}

float dot(const quat& a, const quat& b) {
	return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
}

float lenSq(const quat& q) {
	return q.x * q.x + q.y * q.y + q.z * q.z + q.


Trophy.TrophyDiskCheck()
	end,

	OnUpdate = function(self)
		if DebugText then
			local context = DebugText.NewContext()
			DebugText.Print(context, "Check necessary storage space : trophy installation size.")
		end
	end,

	Messages = function(self)
		return StrCode32Table{
			Network = {
				{
					msg = "TrophySpaceChecked",
					func = function( result, necessaryStorageSpaceSize )
						if necessaryStorageSpaceSize >= 0 then
							Fox.Log("Trophy necessaryStorageSpaceSize = " .. tostring(necessaryStorageSpaceSize))
							mvars.init_needRemainTrophyInstallationSize = necessaryStorageSpaceSize
						end
						TppSequence.SetNextSequence("Seq_Demo_CheckNecessaryStorageSpace")
					end,
				},
			}
		}
	end,

	ignoreSignInUserChanged = true,
}

sequences.Seq_Error_ShowNecessaryStorageSpaceSize = {
	OnEnter = function( self )
		TppUiCommand.SetPopupType( "POPUP_TYPE_NO_BUTTON_NO_EFFECT" )
		local necessaryStorageSpaceSize = mvars.init_necessaryStorageSpaceSize
		local sizeValue, unitLetter, dotPosition = Tpp.GetFormatedStorageSizePopupParam( necessaryStorageSpaceSize )
		TppUiCommand.SetErrorPopupParam( sizeValue, unitLetter, dotPosition )
		TppUiCommand.ShowErrorPopup( TppDefine.ERROR_ID.SAVE_FAILED_NOT_ENOUGH_STORAGE_CAPACITY )
	end,

	OnUpdate = function(self)
		if DebugText then
			local context = DebugText.NewContext()
			DebugText.Print(context, "Show necessary storage space size")
		end
	end,

	ignoreSignInUserChanged = true,
}

sequences.Seq_Error_CannotGetSaveDataNecessaryStorageSpaceSize = {
	OnEnter = function( self )
		TppUiCommand.SetPopupType( "POPUP_TYPE_NO_BUTTON_NO_EFFECT" )
		TppUiCommand.ShowErrorPopup( TppDefine.ERROR_ID.SAVE_FAILED_UNKNOWN_REASON )
	end,

	OnUpdate = function(self)
		if DebugText then
			DebugText.Print(DebugText.NewContext(), "Save data necessary storage space check error. call Tago san.")
		end
	end,

	ignoreSignInUserChanged = true,
}

sequences.Seq_Demo_CheckInstalled = {
	OnEnter = function( self )
		if not this.IsNeedGameInstallation() then

			TppSequence.SetNextSequence("Seq_Demo_StartInstall")
			return
		end

		if this.IsNeedStorageSpaceCheck() then

			Fox.Log("Skip ShowErrorPopup because already showing storage space check.")
		else

			TppUiCommand.SetPopupType( "POPUP_TYPE_NO_BUTTON_NO_EFFECT" )
			TppUiCommand.ShowErrorPopup( TppDefine.ERROR_ID.NOW_INSTALLATION_CHECKING )
		end
		Installer.StartCheckingInstallation()
	end,

	OnUpdate = function(self)
		if DebugText then
			local context = DebugText.NewContext()
			DebugText.Print(context, "Check already installed ...")
		end

		if Installer.IsCheckingInstallation() then

			TppUI.ShowAccessIconContinue()
			return
		end

		mvars.init_doneInstallationCheck = true

		if this.IsNeedStorageSpaceCheck() then
			if DEBUG then
				if gvars.DEBUG_initMissionToTitle then
					TppSequence.SetNextSequence("Seq_Demo_CheckNecessaryStorageSpace")
				else
					TppSequence.SetNextSequence("Seq_Demo_StartInstall")
				end
				return
			end
			TppSequence.SetNextSequence("Seq_Demo_CheckNecessaryS


;
                }
                throw;
            }
        }

        #endregion

        internal partial class CmdletContext : ExecutorContext
        {
            public System.String CancelReason { get; set; }
            public System.Boolean? DryRun { get; set; }
            public System.String ImportTaskId { get; set; }
            public System.Func<Amazon.EC2.Model.CancelImportTaskResponse, StopEC2ImportTaskCmdlet, object> Select { get; set; } =
                (response, cmdlet) => response;
        }

    }
}


astAway)\n" +
                        "  \n" +
                        "CREATE (OneFlewOvertheCuckoosNest:Movie {title:\"One Flew Over the Cuckoo's Nest\", released:1975, tagline:\"If he's crazy, what does that make you?\"})\n" +
                        "CREATE (MilosF:Person {name:'Milos Forman', born:1932})\n" +
                        "CREATE\n" +
                        "  (JackN)-[:ACTED_IN {roles:['Randle McMurphy']}]->(OneFlewOvertheCuckoosNest),\n" +
                        "  (DannyD)-[:ACTED_IN {roles:['Martini']}]->(OneFlewOvertheCuckoosNest),\n" +
                        "  (MilosF)-[:DIRECTED]->(OneFlewOvertheCuckoosNest)\n" +
                        "  \n" +
                        "CREATE (SomethingsGottaGive:Movie {title:\"Something's Gotta Give\", released:1975})\n" +
                        "CREATE (DianeK:Person {name:'Diane Keaton', born:1946})\n" +
                        "CREATE (NancyM:Person {name:'Nancy Meyers', born:1949})\n" +
                        "CREATE\n" +
                        "  (JackN)-[:ACTED_IN {roles:['Harry Sanborn']}]->(SomethingsGottaGive),\n" +
                        "  (DianeK)-[:ACTED_IN {roles:['Erica Barry']}]->(SomethingsGottaGive),\n" +
                        "  (Keanu)-[:ACTED_IN {roles:['Julian Mercer']}]->(SomethingsGottaGive),\n" +
                        "  (NancyM)-[:DIRECTED]->(SomethingsGottaGive),\n" +
                        "  (NancyM)-[:PRODUCED]->(SomethingsGottaGive),\n" +
                        "  (NancyM)-[:WROTE]->(SomethingsGottaGive)\n" +
                        "  \n" +
                        "CREATE (BicentennialMan:Movie {title:'Bicentennial Man', released:1999, tagline:\"One robot's 200 year journey to become an ordinary man.\"})\n" +
                        "CREATE (ChrisC:Person {name:'Chris Columbus', born:1958})\n" +
                        "CREATE\n" +
                        "  (Robin)-[:ACTED_IN {roles:['Andrew Marin']}]->(BicentennialMan),\n" +
                        "  (OliverP)-[:ACTED_IN {roles:['Rupert Burns']}]->(BicentennialMan),\n" +
                        "  (ChrisC)-[:DIRECTED]->(BicentennialMan)\n" +
                        "  \n" +
                        "CREATE (CharlieWilsonsWar:Movie {title:\"Charlie Wilson's War\", released:2007, tagline:\"A stiff drink. A little mascara. A lot of nerve. Who said they couldn't bring down the Soviet empire.\"})\n" +
                        "CREATE (JuliaR:Person {name:'Julia Roberts', born:1967})\n" +
                        "CREATE\n" +
                        "  (TomH)-[:ACTED_IN {roles:['Rep. Charlie Wilson']}]->(CharlieWilsonsWar),\n" +
                        "  (JuliaR)-[:ACTED_IN {roles:['Joanne Herring']}]->(CharlieWilsonsWar),\n" +
                        "  (PhilipH)-[:ACTED_IN {roles:['Gust Avrakotos']}]->(CharlieWilsonsWar),\n" +
                        "  (MikeN)-[:DIRECTED]->(CharlieWilsonsWar)\n" +
                        "  \n" +
                        "CREATE (ThePolarExpress:Movie {title:'The Polar Express', released:2004, tagline:'This Holiday Season… Believe'})\n" +
                        "CREATE\n" +
                        "  (TomH)-[:ACTED_IN {roles:['Hero Boy', 'Father', '


0, qr0
/* 80085D30 00082B30  39 61 00 70 */	addi r11, r1, 0x70
/* 80085D34 00082B34  48 32 7E 11 */	bl _savegpr_23
/* 80085D38 00082B38  3C 80 80 55 */	lis r4, lbl_80552FB0@ha
/* 80085D3C 00082B3C  7C 7E 1B 78 */	mr r30, r3
/* 80085D40 00082B40  38 64 2F B0 */	addi r3, r4, lbl_80552FB0@l
/* 80085D44 00082B44  80 03 00 48 */	lwz r0, 0x48(r3)
/* 80085D48 00082B48  7C 7F 1B 78 */	mr r31, r3
/* 80085D4C 00082B4C  28 00 00 00 */	cmplwi r0, 0
/* 80085D50 00082B50  40 82 01 0C */	bne lbl_80085E5C
/* 80085D54 00082B54  3C 60 80 55 */	lis r3, lbl_8055309C@ha
/* 80085D58 00082B58  38 63 30 9C */	addi r3, r3, lbl_8055309C@l
/* 80085D5C 00082B5C  48 39 23 89 */	bl HSD_ObjAlloc
/* 80085D60 00082B60  3C 80 00 04 */	lis r4, 0x00041EB0@ha
/* 80085D64 00082B64  90 7F 00 48 */	stw r3, 0x48(r31)
/* 80085D68 00082B68  38 A4 1E B0 */	addi r5, r4, 0x00041EB0@l
/* 80085D6C 00082B6C  38 80 00 00 */	li r4, 0
/* 80085D70 00082B70  4B F7 D3 91 */	bl memset
/* 80085D74 00082B74  38 A0 00 00 */	li r5, 0
/* 80085D78 00082B78  38 80 00 00 */	li r4, 0
lbl_80085D7C:
/* 80085D7C 00082B7C  38 00 00 3E */	li r0, 0x3e
/* 80085D80 00082B80  38 C0 00 00 */	li r6, 0
/* 80085D84 00082B84  38 60 00 00 */	li r3, 0
/* 80085D88 00082B88  7C 09 03 A6 */	mtctr r0
lbl_80085D8C:
/* 80085D8C 00082B8C  80 FF 00 48 */	lwz r7, 0x48(r31)
/* 80085D90 00082B90  38 00 FF FF */	li r0, -1
/* 80085D94 00082B94  38 C6 00 08 */	addi r6, r6, 8
/* 80085D98 00082B98  7C E7 1A 14 */	add r7, r7, r3
/* 80085D9C 00082B9C  38 E7 00 14 */	addi r7, r7, 0x14
/* 80085DA0 00082BA0  7C 04 39 2E */	stwx r0, r4, r7
/* 80085DA4 00082BA4  80 FF 00 48 */	lwz r7, 0x48(r31)
/* 80085DA8 00082BA8  7C E7 1A 14 */	add r7, r7, r3
/* 80085DAC 00082BAC  38 E7 00 50 */	addi r7, r7, 0x50
/* 80085DB0 00082BB0  7C 04 39 2E */	stwx r0, r4, r7
/* 80085DB4 00082BB4  80 FF 00 48 */	lwz r7, 0x48(r31)
/* 80085DB8 00


_preview_with_gear_on

			parent._input_legend_element:set_display_name(id, display_name)

			return parent._can_preview_with_gear and parent._selected_element and parent._selected_element.item and not parent._aquilas_showing
		end,
	},
	{
		alignment = "right_alignment",
		display_name = "loc_inventory_menu_zoom_in",
		input_action = "hotkey_menu_special_2",
		on_pressed_callback = "cb_on_camera_zoom_toggled",
		visibility_function = function (parent, id)
			local display_name = parent._zoom_level >= 0.5 and "loc_inventory_menu_zoom_out" or "loc_inventory_menu_zoom_in"

			parent._input_legend_element:set_display_name(id, display_name)

			return parent:_can_zoom()
		end,
	},
}
local text_description_pass_template = {
	{
		pass_type = "text",
		style_id = "text",
		value = "",
		value_id = "text",
		style = description_text_font_style,
	},
}
local item_sub_title_pass = {
	{
		pass_type = "text",
		style_id = "text",
		value = "",
		value_id = "text",


ode handler
  b CycloneEnd

;@ ---------- [51f9] sf $33333333.l uses Op51f9 ----------
Op51f9:
  str r4,[r7,#0x50] ;@ Save prev PC + 2
  str r5,[r7,#0x5c] ;@ Save Cycles

  mov r1,#0

;@ EaCalc : Get '$33333333.l' into r0:
  ldrh r2,[r4],#2 ;@ Fetch Absolute Long address
  ldrh r0,[r4],#2
  orr r0,r0,r2,lsl #16
;@ EaWrite: Write r1 into '$33333333.l' (address in r0):
  str r4,[r7,#0x40] ;@ Save PC
  bic r0,r0,#0xff000000
  mov lr,pc
  ldr pc,[r7,#0x74] ;@ Call write8(r0,r1) handler

  ldr r5,[r7,#0x5c] ;@ Load Cycles
  ldrh r8,[r4],#2 ;@ Fetch next opcode
  subs r5,r5,#20 ;@ Subtract cycles
  ldrge pc,[r6,r8,asl #2] ;@ Jump to opcode handler
  b CycloneEnd

;@ ---------- [52c0] shi d0 uses Op52c0 ----------
Op52c0:
  mov r1,#0
  tst r9,#0x60000000 ;@ hi: !C && !Z
  mvneq r1,r1
  subeq r5,r5,#2 ;@ Extra cycles

;@ EaCalc : Get register index into r0:
  and r0,r8,#0x000f
;@ EaWrite: r1 into register[r0]:
  strb r1,[r7,r0,lsl #2]

  ldrh r8,[r4],#2 ;@ Fetch next opcode
  subs r5,r5,#4 ;@ Subtract cycles
  ldrge pc,[r6,r8,asl #2] ;@ Jump to opcode handler
  b CycloneEnd

;@ ---------- [52c8] dbhi d0, 3335 uses Op52c8 ----------
Op52c8:
  tst r9,#0x60000000 ;@ hi: !C && !Z
  beq DbraTrue

;@ Decrement Dn.w
  and r1,r8,#0x0007
  mov r1,r1,lsl #2
  ldrsh r0,[r7,r1]
  sub r0,r0,#1
  strh r0,[r7,r1]

;@ Check if Dn.w is -1
  cmn r0,#1
  beq DbraMin1

;@ Get Branch offset:
  ldrsh r0,[r4]
  add r0,r4,r0 ;@ r0 = New PC
;@ Check Memory Base+pc
  mov lr,pc
  ldr pc,[r7,#0x64] ;@ Call checkpc()

  mov r4,r0
  tst r4,#1 ;@ address error?
  bne ExceptionAddressError_r_prg_r4
  ldrh r8,[r4],#2 ;@ Fetch next opcode
  subs r5,r5,#10 ;@ Subtract cycles
  ldrge pc,[r6,r8,asl #2] ;@ Jump to opcode handler
  b CycloneEnd

;@ ---------- [52d0] shi (a0) uses Op52d0 ----------
Op52d0:
  str r4,[r7,#0x50] ;@ Save prev PC + 2
  str r5,[r7,#0x5c] ;@ Save Cycles

  mov r1,#0
  tst r9,#0x60000000 ;@ hi: !C && !Z
  mvneq r1,r1

;@ EaCalc : Get '